常春藤罐位于我的dep lib

时间:2016-01-17 02:02:34

标签: ant ivy

我怎么能告诉蚂蚁在我自己的lib中找到Ivy的jar?蚂蚁只是一直看着它的主文件夹,即使我明确告诉它在其他地方找到它。

2 个答案:

答案 0 :(得分:1)

我建议从ANT主目录中删除常春藤罐。 (由于一些非常奇怪的原因,它通常不与ANT打包在一起)。

相反,我建议包括一项特殊任务,以确保安装常春藤。

<available classname="org.apache.ivy.Main" property="ivy.installed"/> 

<target name="install-ivy" description="Install ivy" unless="ivy.installed">
    <mkdir dir="${user.home}/.ant/lib"/>
    <get dest="${user.home}/.ant/lib/ivy.jar" src="http://search.maven.org/remotecontent?filepath=org/apache/ivy/ivy/2.4.0/ivy-2.4.0.jar"/>
    <fail message="Ivy has been installed. Run the build again"/>
</target>

分析

ANT manual概述了ANT在启动时加载的jar的顺序。

  1. -lib jars按命令行上的-lib元素指定的顺序
  2. 来自$ {user.home} /。ant / lib的
  3. 罐子(除非设置了-nouserlib)
  4. 来自ANT_HOME / lib的罐子
  5. 这将永远发生,不幸的是,你在构建文件中做了什么并不重要......

    ANT_HOME / lib

    中的Jars

    在我看来,将罐子放入ANT_HOME有效地创建了ANT的定制安装。它使您的项目在整个机器上的可移植性降低,并且自定义常常被遗忘和未记录。

    因此,如果您可以控制构建服务器,我建议您删除此处找到的任何ANT任务。

    $ {user.home} /。ant / lib

    中的Jars

    由于以下原因,在这里放置罐子不那么令人反感

    • 运行构建的用户拥有的目录
    • 可以通过使用命令行选项 -nouserlib
    • 在运行时忽略
    • 我放在这里的唯一罐子是常春藤......所有其他罐子都存在于常春藤缓存中(包括ANT任务)

答案 1 :(得分:0)

您可以将Ivy二进制文件放在项目文件夹中的某个文件夹中。例如,就我而言,它是etc / build /。我把ivy.jar和jsch.jar放在哪里。

之后在项目defenfition中提供正确的命名空间并加载Ivy。

<project name="somename" basedir="." xmlns:ivy="antlib:org.apache.ivy.ant">
    <target name="ivy-load">
        <path id="ivy.lib.path">
            <pathelement location="${basedir}/etc/build/ivy.jar"/>
            <pathelement location="${basedir}/etc/build/jsch.jar"/>
        </path>
        <taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path"/>
    </target>
    <target name="ivy-init" depends="ivy-load">
        <ivy:settings file="${basedir}/etc/ivysettings/ivysettings.xml"/>
        <ivy:resolve conf="${ivy.conf}"/>
    </target>
    ...
</project>