常春藤罐位于我的图书馆



我怎样才能告诉蚂蚁在我自己的库中找到常春藤的罐子? 蚂蚁只是一直在看它的主文件夹,即使我已经明确告诉它在其他地方找到罐子。

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

相反,我建议包括一个特殊任务来确保安装ivy。

<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

手册概述了ANT在启动时加载jars的顺序。

    -lib
  1. jar 按照命令行上的 -lib 元素指定的顺序排列
  2. 来自 ${user.home}/.ant/lib 的 jars(除非设置了 -nouserlib)
  3. 来自ANT_HOME/lib的罐子

这将永远发生,不幸的是,您在构建文件中做什么并不重要.....

罐子在ANT_HOME/库

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

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

jarrs in the ${user.home}/.ant/lib

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

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

您可以将常春藤二进制文件放在项目文件夹内的某个文件夹中。例如,在我的情况下,它是etc/build/。我把常春藤.jar和jsch.jar放在哪里。

之后,在项目定义中提供正确的命名空间并加载常春藤。

<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>

相关内容

  • 没有找到相关文章

最新更新