【问题标题】:Ant build scripts, antcall, dependencies, etcAnt 构建脚本、antcall、依赖等
【发布时间】:2010-09-05 17:53:57
【问题描述】:

我有一个构建脚本,作为该脚本的一部分,它将一个 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的项目名

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

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

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

【问题讨论】:

    标签: ant build-process


    【解决方案1】:

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

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

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

    【讨论】:

    • 如果需要调整subant目标中的classpath怎么办?
    【解决方案2】:

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

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

    所以你可以这样做:

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

    或类似的东西。

    【讨论】:

    • 制作那个
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2011-08-21
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      相关资源
      最近更新 更多