在蚂蚁中,如何创建和使用目标'library'?



>为了消除我的 antbuild.xml文件中的冗余,我决定将重复的目标分解到mytargets.xml文件中,将其发布到工件存储库,然后按以下方式导入它:

<import>
<url url="http://mycompany.com/artifacts/mycompany.com/mytargets/1.2.3/mytargets-1.2.3.xml"/>
</import>

不喜欢这种方法的两点:

  1. mytargets-1.2.3.xml永远不会出现在磁盘上我可以轻松查看它的任何位置。

  2. 我绝对需要访问 http://mycompany.com/artifacts 才能在项目中做任何事情---它完全破坏了离线工作。

因此,我尝试创建一个setup目标来获取mytargets.xml的本地副本,并调整了我的<import>以使用此本地副本。

<import file="${basedir}/antlib/mytargets/mytargets.xml"/>

但是,正如您可能已经猜到的那样,在以这种方式调整<import>后,我什至无法执行我的目标setup,因为该文件尚不存在:

Buildfile: /home/me/myproject/build.xml
BUILD FAILED
/home/me/myproject/build.xml:265: Cannot find /home/me/myproject/antlib/mytargets/mytargets.xml imported from /home/me/myproject/build.xml

<import>添加optional="true"只会将问题推迟到依赖于mytargets.xml的第一个目标。

我看了 https://ant.apache.org/manual/Types/antlib.html,但这种方法似乎不允许您定义<target>

那么,某人如何在多个项目之间共享 ant XML 位呢? 我已经在以"一种真正的方式"做到这一点了吗? 或者,有没有更好的方法?

如果您主要只是想避免在本地副本已经可用时下载远程副本,则可以尝试如下操作:

<condition property="mytargets.xml.available">
<available file="${basedir}/antlib/mytargets/mytargets.xml" />
</condition>
<target name="setup" unless="mytargets.xml.available">
<get
src="http://mycompany.com/artifacts/mycompany.com/mytargets/1.2.3/mytargets-1.2.3.xml"
dest="${basedir}/antlib/mytargets"
/>
</target>
<target name="main" depends="setup">
<import file="${basedir}/antlib/mytargets/mytargets.xml" />
...
</target>

因此,在我看来,<target>本质上是本地的,不打算重用。 另一方面,<macrodef>似乎是为了重用。

这是"图书馆",mymacros.xml

<?xml version="1.0"?>
<antlib>
<macrodef name="mymacro">
...
</macrodef>
</antlib>

这是客户端,myproject/build.xml

<?xml version="1.0"?>
<project name="myproject">
<target name="mytarget">
<mymacro/>
</target>
<taskdef file="mymacros.xml"/>
</project>

<import><include>不同,如果缺少mymacros.xml<taskdef>不会立即导致构建失败,这使您有机会下载它。

相关内容

  • 没有找到相关文章

最新更新