代码之家  ›  专栏  ›  技术社区  ›  shsteimer

Ant构建脚本、AntCall、依赖项等

  •  27
  • shsteimer  · 技术社区  · 16 年前

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

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

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

    这不起作用,因为与其他几乎所有的Ant Tak不同,导入任务不是从basedir运行的,而是从pwd运行的。为了绕过这个问题,我有一个小细节,它成功地导入了构建文件。

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

    所以现在我解决了我的进口问题,我需要打电话给这项任务,这应该很简单,对吧:

    <antcall target="utils.package" />
    

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

    我现在遇到的问题是,Ant调用不在../utils/build中执行,所以我需要并且找不到的是runat属性或类似的内容,本质上:

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

    我之所以需要这样做,是因为在我的utils构建文件中,选择要复制到jar的代码的步骤是基于相对路径的,以避免在我的ant文件中硬编码路径。有什么想法吗?

    3 回复  |  直到 12 年前
        1
  •  33
  •   martin clayton egrunin    13 年前

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

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

    诀窍是使用 subant 而不是 antcall . 您不必导入其他生成文件。

        2
  •  6
  •   martin clayton egrunin    13 年前

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

    用作basedir的目录 新的蚂蚁项目。默认为 当前项目的basedir,除非 Inheritall已设置为false,位于 哪种情况没有违约 价值。这将覆盖basedir 被调用项目的设置。

    所以你可以这样做:

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

    或者类似的。

        3
  •  0
  •   Peter Kahn    16 年前

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