【问题标题】:How to properly use a target of an importing build file?如何正确使用导入构建文件的目标?
【发布时间】:2021-02-11 07:28:41
【问题描述】:

我对@9​​87654321@ 很陌生,并扩展了现有的构建文件a.xml

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

为了确保b.xml${version} 的存在/访问,我已将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>

感谢您对此提出的任何建议、推荐或评论!

【问题讨论】:

    标签: java xml ant


    【解决方案1】:

    如果您希望保留b.xml 使其在直接/独立于a.xml 使用时可以工作,一种解决方案是使用自己的determine.version 目标设置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。它需要这样的东西:

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

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

    a.xml - A 声明一个目标(不需要称为确定版本),它将在所有依赖于“setupversion”的目标之前运行

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

    【讨论】:

    • 我最终实现了extension-point。添加未知外部目标的依赖项似乎是一种干净的方法。感谢您对此进行概述! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 2021-11-06
    • 2020-08-13
    • 1970-01-01
    相关资源
    最近更新 更多