首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置Ant / Ivy

设置Ant / Ivy
EN

Stack Overflow用户
提问于 2012-09-12 00:33:07
回答 2查看 2K关注 0票数 1

因此,让我们假设我已经安装了一个SVN,并在本地安装了ANT / Ivy。

我想让ivy配置中的“共享”部分指向服务器上的某种共享。我需要如何设置它?

我知道我必须在ivy jar中挖掘,取出ivysettings文件并修改共享存储库。

因此,假设我在intranet上的MyServer.intranet.net上有一台服务器,我团队的文件夹在/ path /to/NetAdmin下(因此完整路径是MyServer.intranet.net/path/to/NetAdmin ),我该如何将其设置为共享库的团队存储库?我是否只需要指定它,当我打包项目时,它会在那里写入依赖项?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-13 09:54:05

下面是我所做的:

我创建了一个Subversion项目,名为ivy.dir.

  • In
  • ivy.dir项目,我有最新的ivy.jar。
  • ivy.dir中,我为我们的环境安装了ivysettings.xml。例如,我们将本地Artifactory Maven存储库用于我们自己的jars。ivy.dir项目中的ivysettings.xml指向该文件。
  • 我创建了一个名为ivy.tasks.xml的文件。这是一个Ant构建文件。

ivy.tasks.xml如下所示:

代码语言:javascript
复制
<project name="Ivy.Tasks"
    xmlns:ivy="http://ant.apache.org/ivy"
    xmlns:jacoco="antlib:org.jacoco.ant">

    <property environment="env"/>

    <!-- Add Ivy Tasks -->
    <taskdef uri="http://ant.apache.org/ivy"
        resource="org/apache/ivy/ant/antlib.xml">
        <classpath>
            <fileset dir="${ivy.dir}">
                <include name="ivy*.jar"/>
            </fileset>
        </classpath>
    </taskdef>
    <ivy:settings file="${ivy.dir}/ivysettings.xml"/>
</project>

请注意,我有自己的Ivy设置,谢谢。我不需要在ivy.jar中使用这个文件(尽管我可以这样做,因为每个人都会使用我的ivy.jar文件!)。我的ivysettings.xml看起来像这样:

代码语言:javascript
复制
<ivysettings>

    <!-- I'll explain this part below -->
    <property name="env.EXECUTOR_NUMBER" value="0" override="false"/>
    <caches
        defaultCacheDir="${ivy.default.ivy.user.dir}/cache-${env.EXECUTOR_NUMBER}"
        resolutionCacheDir="${ivy.dir}/../target/ivy.cache"/>

    <!-- Just the standard stuff you find in the `ivysettings.xml in the ivy.jar -->
    <settings defaultResolver="default"/>
    <include file="${ivy.dir}/ivysettings-public.xml"/> <!-- This one is different -->
    <include url="${ivy.default.settings.dir}/ivysettings-shared.xml"/>
    <include url="${ivy.default.settings.dir}/ivysettings-local.xml"/>
    <include url="${ivy.default.settings.dir}/ivysettings-main-chain.xml"/>
    <include url="${ivy.default.settings.dir}/ivysettings-default-chain.xml"/>
</ivysettings>

最大的变化是ivysetting-public.xml文件:

代码语言:javascript
复制
<ivysettings>
    <resolvers>
        <ibiblio name="public"
            m2compatible="true"
            checkmodified="true"
            root="http://repos.vegicorp.com/artifactory/libs-release" />
    </resolvers>
</ivysettings>

它指向我本地的Maven存储库--我的Artifactory服务器。

现在,对于使用Ivy的开发人员来说,他们所要做的就是:

  • 在Subversion中自己的项目根目录下,添加一个svn:external。此svn:external将用于将我的ivy.dir项目引入到他们的Subversion项目中。
  • build.xml
    • 中的
    • 将常春藤命名空间定义添加到< <project>
      • to `${basedir}/ivy.dir.
      • Use d41任务中的属性ivy.dir中,以便将${ivy.dir}/ivy.tasks.xml导入到他们的build.xml任务中

如下所示:

代码语言:javascript
复制
<project name="post-a-matic" default="package" basedir="."
    xmlns:ivy="http://ant.apache.org/ivy">

    <property name="ivy.dir" value="${basedir}/ivy.dir"/>
    <import file="${ivy.dir}/ivy.tasks.xml"/>

    <!-- A whole bundle of properties are set -->

    <target name="clean">
        <delete dir="${target.dir}"/>
        <ivy:cleancache/>   <!-- Look: They have access to Ivy! -->
    </target>

    <target name="-resolve">
        <ivy:resolve/>
    </target>

    <target name="compile"
        depends="-resolve">

       <ivy:cachpath 
           pathid="main.classpath" 
           conf="compile,provided"/>

       <!-- Boy that's easy! -->

       <javac srcdir="${main.srcdir}"
           destdir="${main.destdir}"
           classpathref="main.classpath"/>
   </target>

   <!-- On and on -->

这解决了很多问题:

  • 您可以更新ivy.settings,每个人都将拥有更新后的设置。这对我们来说非常重要,因为我们使用Jenkins,我希望Jenkins在每次构建时清理常春藤缓存。哇哦!这将清除同时执行的构建上的常春藤缓存!我通过更改ivysettings.xml文件来为每个Jenkins构建执行器定义不同的Ivy缓存,从而解决了这个问题。在Jenkins服务器上,您有名为$HOME/.ivy2/cache-0$HOME/.ivy2/cache-1等的常春藤缓存。每个executor可以删除自己的常春藤缓存,而不会影响其他常春藤缓存。同时,用户只需使用$HOME/.ivy2/cache-0.
  • You就可以在新的jar发布时更新Ivy。你更新了你的Ivy jar文件,每个人都得到了最新的。
  • 最大的一点当然是,当一个项目被检查时,Ivy会自动安装,还有一个额外的特殊奖励:你可以使用你的ivy.dirivy.tasks.xml文件来安装其他任务。例如,我们的每个项目都必须通过FindbugsPMD、CPD ( PMD项目的一部分)、Checkstyle和使用JaCoCo来运行。用于测试覆盖率。

这些项目中的每一个都由一个jar文件和一个用于将任务定义拉入Ant的<taskdef>组成。还有,你也是如何使用这些任务的?它们不是在标准Ant模型中定义的。开发人员不知道如何使用它们。

我已经将这些jars添加到我的ivy.dir项目中,并将所有这些任务定义安装到我的ivy.tasks.xml文件中。我还为大多数任务定义了易于使用的<macrodef>,因此开发人员可以很容易地使用它们。事实上,我甚至为了好玩而包含了旧的Ant-Contrib任务。

现在,一旦您将ivy.dir添加到您的项目中,您就有了所有这些额外的任务,并且您没有什么需要安装到您的机器上。

票数 2
EN

Stack Overflow用户

发布于 2012-09-13 05:19:34

你不需要换常春藤罐子。只需在ivysettings文件中创建一个文件系统解析器并发布到此。下面是一个例子:

您会发现ivy非常灵活,几乎可以支持任何托管文件的机制。

就我个人而言,我会考虑安装像NexusArtifactory这样的Maven库管理器,并使用它来托管您的构建依赖项和构建输出。从长远来看,这要容易得多,特别是如果您正在进行Java开发。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12374161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档