我有两个代表版本号的属性(如1.0.2.4)。 我需要比较其中一个属性是否包含比其他属性更多的点。
在ANT中实现这一目标的最简单方法是什么?
答案 0 :(得分:2)
使用脚本条件执行测试
<project name="demo" default="run">
<property name="ver1" value="1.0.2.4"/>
<property name="ver2" value="1.0.2"/>
<condition property="ver1.has.more.dots">
<scriptcondition language="javascript"><![CDATA[
var count1 = String(project.getProperty("ver1")).split(".").length;
var count2 = String(project.getProperty("ver2")).split(".").length;
self.setValue(count1 > count2)
]]></scriptcondition>
</condition>
<target name="run" if="ver1.has.more.dots">
<echo message="It works!"/>
</target>
</project>
答案 1 :(得分:2)
Mark O'Connor的回答应该足够了。但更纯粹(通用)的Ant解决方案可能如下所示:
<macrodef name="getcount">
<attribute name="valueToCheck" />
<attribute name="propertyToSet" />
<attribute name="characterToCount" />
<sequential>
<resourcecount property="@{propertyToSet}">
<tokens>
<stringtokenizer delims="@{characterToCount}" />
<string value="@{valueToCheck}" />
</tokens>
</resourcecount>
</sequential>
</macrodef>
可以像:
一样使用<property name="version1" value="1.2.3.4" />
<property name="version2" value="1.2.3.4.5" />
<target name="init" depends="checkVersions" if="versions.are.different">
<echo>versions differ!</echo>
</target>
<target name="checkVersions">
<getcount valueToCheck="${version1}" propertyToSet="ver1.count" characterToCount="." />
<getcount valueToCheck="${version2}" propertyToSet="ver2.count" characterToCount="." />
<condition property="versions.are.different">
<not>
<equals arg1="${ver1.count}" arg2="${ver2.count}"></equals>
</not>
</condition>
</target>
请记住,因为我们使用分隔符,所以像“1.2.3.4”这样的值。不会导致5而是4,因为最后一个分隔符后面没有任何内容。