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

时间:2008-08-12 13:04:29

标签: ant build-process

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

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

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

哪个不起作用,因为导入任务与几乎所有其他ant taks不同,不是从basedir运行,而是从pwd运行。因此,为了解决这个问题,我有一个小小的小调,它确实成功导入了构建文件

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

所以现在我已经解决了我需要调用任务的导入问题,那应该很容易:

<antcall target="utils.package" />

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

我现在遇到的问题是蚂蚁调用没有在../utils/build中执行,所以我需要的,并且无法找到,是一个runat属性或类似的东西,基本上:

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

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

3 个答案:

答案 0 :(得分:33)

我有一些类似的设置:我有一个主Ant build.xml,它调用一个单独的build.xml来负责构建我的测试。我就是这样做的:

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

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

答案 1 :(得分:6)

尝试使用"ant" task代替“antcall”任务,该任务直接运行导入的构建,而不是将其导入当前构建文件。它有一个“dir”参数:

  

用作basedir的目录   为新的Ant项目。默认为   除非是当前项目的基础   inheritall已被设置为false,in   在哪种情况下它没有默认值   值。这将覆盖基础   设置被调用的项目。

所以你可以这样做:

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

或类似的东西。

答案 2 :(得分:0)

您可以使用嵌套在antcall块中将params传递给antcall。因此,您可以通过这种方式传递属性(可能甚至是基于属性,因为属性是不可变的)。