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

时间:2020-03-05 18:39:10  来源:igfitidea点击:

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

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

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

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

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

因此,现在ive解决了我的导入问题,我需要调用该任务,这应该很容易就可以了:

<antcall target="utils.package" />

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

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

<antcall target="utils.package" runat="../utils/build" />

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

解决方案

回答

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

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

因此,我们可以执行以下操作:

<ant antfile="${baseDirUpOne}/utils/build/build.xml" dir="../utils/build" />

或者类似的东西。

回答

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