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

shs*_*mer 27 ant build-process

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

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

<import file="../utils/build/build.xml" />
Run Code Online (Sandbox Code Playgroud)

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

  <property name="baseDirUpOne" location=".." />
  <import file="${baseDirUpOne}/utils/build/build.xml" />
Run Code Online (Sandbox Code Playgroud)

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

<antcall target="utils.package" />
Run Code Online (Sandbox Code Playgroud)

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

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

<antcall target="utils.package" runat="../utils/build" />
Run Code Online (Sandbox Code Playgroud)

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

The*_*heo 33

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

<target name="build-tests">
    <subant target="build">
      <fileset dir="${test.home}" includes="build.xml"/>
    </subant>
</target>
Run Code Online (Sandbox Code Playgroud)

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


Jam*_*lak 6

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

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

所以你可以这样做:

<ant antfile="${baseDirUpOne}/utils/build/build.xml" dir="../utils/build" />
Run Code Online (Sandbox Code Playgroud)

或类似的东西.

  • 做那个<ant ...而不是<antcall ...而且你很高兴. (2认同)