如何正确使用导入构建文件的目标?

How to properly use a target of an importing build file?

我是 ant 的新手,我扩展了现有的构建文件 a.xml:

我创建了一个额外的构建文件 b.xml,它由 a.xml 导入。 b.xml 中定义的目标 example 在使用 ant 构建时提供了新的 (可选) 功能,这需要 ${version} 属性。 ${version} 属性 是 created/provided 由目标 determine.version in a.xml.

为了确保 b.xml 中的 ${version} 的 existence/access 我已经将 depends="determine.version" 参数添加到 b.xml 中的目标 example .因此,当 运行 b.xml(这不是预期的).

时,我向不可解析的目标添加了依赖项

问题:

我对这个解决方案感到不舒服,想问一下是否有更简洁的方法来确保 ${version}b.xml 中的存在和访问。

a.xml


<project name="a" basedir="." >
   ...
   <target name="determine.version">
      ...
   </target>

   ... 

   <import file="b.xml" as="b" />
</project>

b.xml

<project name="b" basedir="." >
   ...
   <target name="example" depends="determine.version">
      ...
      do s.th. with ${version}
      ...
   </target>

</project>

感谢您对此的任何建议、建议或评论!

如果您希望保留 b.xml 以便它在直接使用/独立于 a.xml 时可以正常工作,一种解决方案是使用自己的 [=15= 设置 b.xml ] 在 a.xml.

中定位并覆盖该目标

b.xml 需要:

<target name="determine.version">
  ... does nothing or whatever is needed to satisfy b's "example" target when a.xml not used
</target>

a.xml 然后可以覆盖 determine.version 并依赖于 b.xml 中的默认实现,因此在评估时在正确的位置调用它b.xml 的“示例”目标。引用导入依赖项的方法是指定 {buildfile}.targetname - 在本例中为 b.determine.version - 假设您希望 a+b 的 determine.version 到 运行:

<target name="determine.version" depends="b.determine.version">
  ...
</target>

或者

上面的设置很笨拙,因为 a/b xml 中使用的名称是链接的。相反,您可以在 ant 构建中尝试 extension-point,这使得 a 中的名称依赖于 b,但不是两种方式。它需要这样的东西:

b.xml - B 声明了一个由“example”引用的扩展点:

<extension-point name="setupversion" />
<target name="example" depends="setupversion">

a.xml - A 声明一个目标(不需要调用 determine.version),它将 运行 在所有目标之前取决于“设置版本”

<import file="b.xml" />
<target name="determine.version" extensionOf="setupversion">