设置Ant / Ivy

时间:2012-09-11 16:33:07

标签: ant ivy

所以,我们假设我已经安装了SVN并在本地安装了ANT / Ivy。

我想让常春藤配置的“共享”部分指向服务器上的某种共享。我怎么需要设置它?

我知道我必须深入了解常春藤罐并取出ivysettings文件并修改共享存储库。

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

由于

2 个答案:

答案 0 :(得分:2)

我在这里做了什么:

  • 我创建了一个名为ivy.dir
  • 的Subversion项目
  • 在这个ivy.dir项目中,我有最新的ivy.jar。
  • ivy.dir中,我为我们的环境设置了ivysettings.xml。例如,我们为自己的jar使用本地Artifactory Maven存储库。 ivysettings.xml项目中的ivy.dir指向该内容。
  • 我创建了一个名为ivy.tasks.xml的文件。这是一个Ant构建文件。

ivy.tasks.xml看起来像这样:

<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.jar中找到一个(尽管我可以拥有,因为每个人都会使用我的ivy.jar文件!)。我的ivysettings.xml看起来像这样:

<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文件:

<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中
    • build.xml定义中向<project>添加常春藤命名空间定义。
    • 将属性ivy.dir设置为“$ {basedir} /ivy.dir。
    • 使用<import>任务将${ivy.dir}/ivy.tasks.xml导入其build.xml文件。

这样的事情:

<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构建执行程序定义不同的常春藤缓存来解决问题。一个Jenkins服务器,你有常春藤缓存,称为$HOME/.ivy2/cache-0$HOME/.ivy2/cache-1等。每个执行者都可以删除它自己的常春藤缓存,而不会影响其他人。用户同时只有$HOME/.ivy2/cache-0
  • 当新的jar出来时你也可以更新Ivy。你更新你的常春藤jar文件,每个人都得到了支持。
  • 当然,当项目签出时,Ivy会自行安装。
  • 还有额外的特殊奖励 :您可以使用ivy.dirivy.tasks.xml文件来安装其他任务。例如,我们的每个项目都必须通过FindbugsPMD,CPD(PMD项目的一部分,Checkstyle,并使用JaCoCo进行测试覆盖。< / LI>

这些项目中的每一个都包含一个jar文件和一个<taskdef>,用于将任务定义拉入Ant。而且,你如何使用这些任务呢?它们未在标准Ant模型中定义。开发人员不知道如何使用它们。

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

现在,一旦将ivy.dir添加到项目中,就可以完成所有这些额外任务,而且您的计算机上无需安装任何内容。

答案 1 :(得分:1)

您无需更换常春藤罐。只需在ivysettings文件中创建一个文件系统解析器并发布到此文件系统。这是一个例子:

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

就个人而言,我考虑安装一个Maven存储库管理器,如NexusArtifactory,并使用它来托管构建依赖项和构建输出。从长远来看,它更容易,特别是如果你正在进行Java开发。