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

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

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

这不起作用,因为导入任务与几乎所有其他 ant 任务不同,不是从 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 文件中硬编码路径。有任何想法吗?

有帮助吗?

解决方案

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

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

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

其他提示

尝试使用 “蚂蚁”任务 而不是“antcall”任务,它直接运行导入的构建,而不是将其导入到当前构建文件中。它有一个“dir”参数:

用作新蚂蚁项目的目录。默认为当前项目的基于,除非将继承设置为false,在这种情况下,它没有默认值。这将覆盖所谓项目的基于设置。

所以你可以这样做:

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

或类似的东西。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top