如何正确使用导入构建文件的目标?
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">
我是 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">