gpt4 book ai didi

ant - 检查多个属性是否设置并且不为空( Ant )

转载 作者:行者123 更新时间:2023-12-04 17:37:58 28 4
gpt4 key购买 nike

我遇到的情况涉及运行带有可选参数的 ant 构建,这些参数总是被指定但并不总是被定义,就像这样

ant -DBUILD_ENVIRONMENT=test -Dusername_ext= -Dconf.dir_ext= -Dcgi-dir_ext=

如果参数未在命令行中指定值,则它们将通过加载 .properties 文件来指定。我有以下代码将检查属性是否已设置并且不为空。
<if>
<bool>
<and>
<isset property="username_ext"/>
<not>
<equals arg1="${username_ext}" arg2="" />
</not>
</and>
</bool>
<then>
<property name="username" value="${username_ext}" />
</then>
</if>
<property file="${BUILD_ENVIRONMENT}.properties" />

由于有多个属性,似乎我应该编写一个目标,对每个属性执行相同的操作,而不是每次都重复该代码。
<antcall target="checkexists">
<property name="propname" value="username"/>
<property name="paramname" value="username_ext"/>
</antcall>
<antcall target="checkexists">
<property name="propname" value="conf.dir"/>
<property name="paramname" value="conf.dir_ext"/>
</antcall>

但 AFAIK an antcall 不会设置全局属性。那么我如何编写一个目标,该目标将接受它需要检查的参数名称是否设置为空,然后将其复制到其他目标可以使用的参数中?

最佳答案

您可以使用宏根据另一个属性是否设置为非空值来有条件地设置属性,而不是使用目标。

<macrodef name="set-property">
<attribute name="name" />
<attribute name="if-property-isset" />
<attribute name="value" default="${@{if-property-isset}}" />

<sequential>
<condition property="@{name}" value="@{value}">
<and>
<isset property="@{if-property-isset}" />
<not>
<equals arg1="${@{if-property-isset}}" arg2="" />
</not>
</and>
</condition>
</sequential>
</macrodef>


<target name="test-macro">
<set-property name="username" if-property-isset="username_ext" />

<set-property name="conf.dir" if-property-isset="conf.dir_ext" />

<property name="conf.dir" value="default conf directory" />

<echo message="username = ${username}" />
<echo message="conf.dir = ${conf.dir}" />
</target>

输出
$ ant test-macro -Dusername_ext=jsmith -Dconf.dir_ext=
Buildfile: /your/project/build.xml

test-macro:
[echo] username = jsmith
[echo] conf.dir = default conf directory

BUILD SUCCESSFUL
Total time: 1 second

替代属性值

此宏还允许您将属性设置为与命令行上提供的值不同的值。
<target name="test-macro">
<set-property name="username" if-property-isset="username_ext"
value="It worked!" />

<set-property name="conf.dir" if-property-isset="conf.dir_ext" />

<property name="conf.dir" value="default conf directory" />

<echo message="username = ${username}" />
<echo message="conf.dir = ${conf.dir}" />
</target>

输出
$ ant test-macro -Dusername_ext=jsmith -Dconf.dir_ext=
Buildfile: /your/project/build.xml

test-macro:
[echo] username = It worked!
[echo] conf.dir = default conf directory

BUILD SUCCESSFUL
Total time: 1 second

关于ant - 检查多个属性是否设置并且不为空( Ant ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12030623/

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