Ant构建脚本,antcall,依赖项等

Ant构建脚本,antcall,依赖项等

Ant build scripts, antcall, dependencies, etc

我有一个构建脚本,作为该脚本的一部分,它将一个jar文件复制到一个目录中,为方便起见,我们将其称为utils jar。 utils jar由另一个目录中的另一个构建脚本构建。我想做的是让我的构建脚本运行utils构建脚本,以便确保utils jar是最新的。

所以我知道我需要导入utils构建文件。

1
<import file="../utils/build/build.xml" />

这是行不通的,因为与几乎所有其他蚂蚁taks不同,导入任务不是从basedir运行,而是从pwd运行。因此,为了解决这个问题,我准备了一些小技巧,可以成功导入构建文件

1
2
  <property name="baseDirUpOne" location=".." />
  <import file="${baseDirUpOne}/utils/build/build.xml" />

因此,现在我已经解决了导入问题,我需要调用该任务,这应该很容易:

1
 

请注意,在上面,utils是../utils/build/build.xml的项目名称

我现在遇到的问题是ant调用没有在../utils/build中执行,所以我需要的却是runat属性或类似的东西,本质上是:

1
 

我需要这个的原因是,在我的utils构建文件中,选择要复制到jar的代码的步骤是基于相对路径的,以避免在ant文件中对路径进行硬编码。有任何想法吗?


我已经进行了类似的设置:我有一个主要的Ant build.xml,它调用了一个单独的build.xml,用于构建测试。 这是我的方法:

1
2
3
4
5
<target name="build-tests">
    <subant target="build">
      <fileset dir="${test.home}" includes="build.xml"/>
    </subant>
</target>

诀窍是使用subant而不是antcall。 您不必导入其他构建文件。


尝试使用" ant"任务代替" antcall"任务,后者直接运行导入的构建,而不是将其导入到当前构建文件中。 它具有" dir"参数:

the directory to use as a basedir
for the new Ant project. Defaults to
the current project's basedir, unless
inheritall has been set to false, in
which case it doesn't have a default
value. This will override the basedir
setting of the called project.

因此,您可以执行以下操作:

1
 

或类似的东西。


您可以使用antcall块中的嵌套将参数传递给antcall。 因此,您可以以这种方式传递属性(由于属性是不可变的,因此甚至可以基于基础)。


推荐阅读