java – 如何动态地将Ivy添加到Ant

通常,要使Ivy任务可用于Ant构建,您需要:

>将ivy.jar添加到${ANT_HOME} / lib.
>将一个xmlns:ivy =“antlib:org.apache.ivy.ant”声明添加到build.xml的< project>元件.
>添加< taskdef> build.xml中的声明引用了ivy.jar的antlib.xml文件,其中定义了所有其他任务.

除了第一步(将ivy.jar添加到${ANT_HOME} / lib)之外,我想完成上述所有操作.我想让ivy.jar住在我的项目中的某个地方,例如,在lib / buildtime / ivy.jar,并以某种方式引用lib / buildtime / ivy.jar作为Ivy所在的位置.

这可能吗?如果是这样,怎么样?如果没有,为什么?提前致谢!

解决方法:

如果常春藤罐位于标准ANT库目录中,则不需要taskdef(步骤3).

我建议包括一个特殊的“bootstrap”目标,它将安装常春藤罐.完成此操作后,ivy可以将所有其他依赖项(包括第三方ANT任务)作为构建依赖项下载.

这是我的默认构建文件,演示了这个概念:

<project name="demo" default="resolve" xmlns:ivy="antlib:org.apache.ivy.ant">

    <target name="bootstrap" description="Install ivy">
        <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.3.0/ivy-2.3.0.jar"/>
    </target>

    <target name="resolve" description="Use ivy to resolve classpaths">
        <ivy:resolve/>

        <ivy:report todir='build/ivy-reports' graph='false' xml='false'/>

        <ivy:cachepath pathid="compile.path" conf="compile"/>
        <ivy:cachepath pathid="test.path"    conf="test"/>
    </target>

    <target name="clean" description="Cleanup build files">
        <delete dir="build"/>
    </target>

    <target name="clean-all" depends="clean" description="Additionally purge ivy cache">
        <ivy:cleancache/>
    </target>

</project>

笔记:

>“bootstrap”目标只需要在新的开发环境中运行一次.一旦安装,常春藤罐可用于所有未来的ANT运行.
>此示例不使用“$ANT_HOME / lib”(您可能没有写入权限).相反,它使用鲜为人知的“$HOME / .ant / lib”目录来实现相同的目的.

上一篇:java – 以编程方式使用IVY依赖项管理器


下一篇:java – 如何更新随播放提供的Hibernate?