我是Ant新手你可以帮助我满足以下需求吗?
尝试比较文件中的字符串并附加新字符串并保留现有字符串。说我的输入是
Project = vinoth,raghu,ram
我有一个名为ram.properties的文件。文件如下所示
这是了解Ant概念的文件 项目= Vinoth,raghu
通过比较输入和文件,项目值上只缺少ram。 我需要在文件的项目值中附加ram。我可以编写一个像下面这样的简单循环来查找但是如何附加值。 非常感谢您的帮助。
由于
答案 0 :(得分:1)
在这里使用ant资源快速尝试,if/unless feature需要ant> = 1.9.3:
<project
xmlns:if="ant:if"
xmlns:unless="ant:unless"
>
<!-- Propertyfile containing the property to be compared against -->
<property file="ram.properties"/>
<!-- create macrodef for reuse -->
<macrodef name="stringcompare">
<attribute name="property"/>
<attribute name="string"/>
<attribute name="update"/>
<sequential>
<resources id="property">
<tokens>
<stringtokenizer delims=", "/>
<string value="${@{property}}"/>
</tokens>
</resources>
<resources id="string">
<tokens>
<stringtokenizer delims=", "/>
<string value="@{string}"/>
</tokens>
</resources>
<difference id="diff">
<resources refid="property"/>
<resources refid="string"/>
</difference>
<echo> Diff ? => ${toString:diff}</echo>
<replace file="@{update}" token="${@{property}}" value="${@{property}} ,${toString:diff}" unless:blank="${toString:diff}"/>
</sequential>
</macrodef>
<stringcompare property="Project" string="vinoth, raghu, ram" update="ram.properties"/>
</project>
注意:macrodef属性属性使用propertyname(property="Project"),
,而内部逻辑使用propertyvalue ${@{property}}
!
编辑
未设置必需的属性属性
表示你没有使用属性属性f.e调用macrodef。 :
<stringcompare string="vinoth, raghu, ram" update="ram.properties"/>
我已尝试使用ram.properties这样的片段:
Project = vinoth,raghu
输出:
[echo] Diff ? => ram
ram.properties之后:
Project = vinoth,raghu,ram