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

时间:2018-05-02 20:26:58

标签: ant

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

<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才能在项目中执行任何 - 它完全破坏了离线工作。

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

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

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

    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
    

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

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

    那么,有人如何在多个项目中共享一些ant XML?我是否已经采用了这种真正的方式&#39;?或者,有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

如果您在本地副本已经可用时主要是试图避免下载远程副本,您可以尝试这样的事情:

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

答案 1 :(得分:0)

因此,在我看来,<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>不同,<taskdef>如果缺少mymacros.xml,则不会导致构建立即失败,这样您就有机会下载它。