gpt4 book ai didi

java - 如果 Apache Ant 文件集中满足条件,则包含文件

转载 作者:行者123 更新时间:2023-12-01 17:05:32 26 4
gpt4 key购买 nike

有没有办法根据 Apache Ant (1.8.3) 中的条件包含排除某些文件?例如,我有一个带有属性的macrodef。如果属性的值与 xyz 匹配,我想包含某些文件:

<macrodef name="pkgmacro">
<attribute name="myattr" />
<sequential>
<zip destfile="${dist}/@{myattr}.war">
<fileset dir="${dist}/webapp" >
<include name="**/@{myattr}/**" />
<exclude name="WEB-INF/config/**" />
<!-- if @{myattr} = "xyz", then
<include name="PATH/TO/file.xml" />
-->
</fileset>
<zipfileset dir="${ear}/@{myattr}/WEB-INF/" includes="*.xml" prefix="WEB-INF/" />
</zip>
</sequential>
</macrodef>

例如,如果myattr值为xyz,我想包含上面部分中的注释文件。

最佳答案

文件集可以使用nested include/exlucde patternsets与如果/除非属性。当设置或未设置命名属性时,会包含/排除该模式,因此不需要 ant 插件。
一些片段:

<project>

<!-- property that triggers your include/exclude
maybe set via condition in some other target .. -->
<property name="foo" value="bar"/>

<macrodef name="pkgmacro">
<attribute name="myattr" />
<sequential>
<fileset dir="C:/whatever" id="foobar">
<!-- alternatively
<include name="*.bat" unless="@{myattr}"/>
-->
<include name="*.bat" if="@{myattr}"/>
</fileset>
<!-- print fileset contents -->
<echo>${toString:foobar}</echo>
</sequential>
</macrodef>

<pkgmacro myattr="foo"/>

</project>

--评论后编辑--

if/unless attribute之后include name/exclude name检查给定值是否是在 ant 项目范围内设置(使用 if=".."时)或未设置(使用 except=".."时)的属性 - 它不检查特定值。
<include name="*.xml" unless="foo"/>
表示仅当您的项目中没有设置名为 foo 的属性时,include 才会处于 Activity 状态
<include name="*.xml" if="foo"/>
意味着只有在项目中设置了名为 foo 的属性时,include 才处于 Activity 状态


对我来说工作正常,使用 Ant 1.7.1,现在没有 Ant 1.8.x :

<project>

<echo>$${ant.version} => ${ant.version}</echo>

<macrodef name="pkgmacro">
<attribute name="myattr"/>
<sequential>
<condition property="pass">
<equals arg1="@{myattr}" arg2="xyz" />
</condition>
<fileset dir="C:/whatever" id="foobar">
<include name="*.bat" if="pass" />
</fileset>
<echo>${toString:foobar}</echo>
</sequential>
</macrodef>

<pkgmacro myattr="xyz"/>

</project>

输出:

[echo] ${ant.version} => Apache Ant version 1.7.1 compiled on June 27 2008
[echo] switchant.bat;foobar.bat;foo.bat

-- 评论后编辑--
使用多个包含模式效果很好:

...
<fileset dir="C:/whatever" id="foobar">
<include name="*.xml" if="pass" />
<include name="*.bat" if="pass"/>
<include name="**/*.txt" if="pass"/>
</fileset>
...

也许您使用了错误的模式?

-- 评论后编辑--

Here is the reference<local>处理当前范围内的属性所需的任务,在本例中为 <sequential> :

 <macrodef name="pkgmacro">
<attribute name="myattr"/>
<sequential>
<!-- make property pass mutable -->
<local name="pass"/>
<condition property="pass">
<equals arg1="@{myattr}" arg2="xyz" />
</condition>
<fileset dir="C:/whatever" id="foobar">
<include name="*.xml" if="pass" />
<include name="*.bat" if="pass" />
<include name="**/*.txt" if="pass" />
</fileset>
<!-- print value of property pass and fileset contents -->
<echo>$${pass} = ${pass}${line.separator}${toString:foobar}</echo>
</sequential>
</macrodef>

关于java - 如果 Apache Ant 文件集中满足条件,则包含文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25733759/

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