gpt4 book ai didi

java - "Override"导入的 Ant 文件的属性

转载 作者:行者123 更新时间:2023-11-30 08:54:55 26 4
gpt4 key购买 nike

我想覆盖一个导入的 Ant-File 的一些属性,它处理部署应用程序的大部分基本内容。首先我知道 Ant 中的属性是不可变的。但是我可以想出两种方法来根据我的需要“覆盖”属性,我想知道哪一种应该是首选方法,和/或是否有任何事情需要考虑以一种或另一种方式进行。

假设我们有以下 master-build-script,我想将其导入到我的构建脚本中:

<project name="Application" default="build" basedir=".">

<property name="overridden" value="false" />

<target name="build">
<echo message="Value of overridden is ${overridden}" />
</target>
</project>

现在我想覆盖被覆盖 的属性。在这两种情况下,我都导入了 master-build-file。我使用 import 而不是 include,因为我还想覆盖一些目标。我知道有两种可能的解决方案来覆盖它们:

1) 由于属性是不可变的,我可以在实际导入主文件之前通过定义它们来定义我想“覆盖”的属性:

<project name="MyApplication" default="buildApplication" basedir=".">

<property name="overridden" value="true" />

<import file="master-build.xml" />

<target name="buildApplication">
<antcall target="build" />
</target>
</project>

2) 我在 Ant 调用中定义了 Params,它似乎也重新定义了一个属性值:

<project name="MyApplication" default="buildApplication" basedir=".">

<import file="master-build.xml" />

<target name="buildApplication">
<antcall target="build" >
<param name="overridden" value="true"/>
</antcall>
</target>
</project>

在这两种情况下,结果都是:

build:
[echo] Value of overridden is true
BUILD SUCCESSFUL

谁能如此友善,可以向我解释其中的区别,还可以解释为什么我应该使用一种方法而不是另一种方法,甚至应该使用不同的方法来获得相同的结果?

最佳答案

您的第一个示例和第二个示例之间的主要区别在于,在第二种情况下,该属性仅为子构建定义,有时这可能是您想要的,而不是为构建全局定义的。

您可以在全局范围内预先定义属性的其他方法...

在执行 ant 时作为 JVM args 传递,例如

ant -Doverridden=true

在文件中定义属性并在构建开始时加载,例如

build.properties:

overridden=true

build.xml:

<project name="MyApplication" default="buildApplication" basedir=".">

<property file="build.properties/>

一个有用的变体是从用户主目录加载用户可定义的属性,例如像这样的东西:

<property file="${user.home}/MyApplication/build.properties/>

与您提供的示例相比,这两种方法的优势在于无需更改构建文件即可覆盖属性。

关于java - "Override"导入的 Ant 文件的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29279263/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com