我需要从属性值中提取一个子字符串,f.e。:
<property name="prop1" value="nameBLABLABLA" />
我想获得值
name
不使用JavaScript代码可以吗?
不是与香草蚂蚁一起,您需要添加一些蚂蚁插件,例如
antcontrib(2006年最新版本!)或ant flaka-意味着您需要其他罐子/库。<<<<<<<<<<br>使用JDK内置JavaScript引擎,它很容易:
<project>
<!-- create a macrodef for reuse -->
<macrodef name="getsubstring">
<attribute name="src"/>
<attribute name="from"/>
<attribute name="to"/>
<attribute name="result"/>
<sequential>
<script language="javascript">
project.setProperty(
"@{result}", "@{src}".substring(@{from},@{to})
);
</script>
</sequential>
</macrodef>
<property name="foo" value="nameBLABLABLA"/>
<getsubstring src="${foo}" from="0" to="4" result="foobar"/>
<echo> $${foobar} => ${foobar}</echo>
</project>
无需其他库。
创建了一个分别适用于字符串的属性的macrodef。
JavaScript引擎了解JavaScript和Java,您将可以完全访问Ant API。
我会在rebse的答案中使用javascript,但是在不使用 <loadresource>
和 <tokenfilter>
的情况下,有一种方法可以做到这一点。这使用启动/长度,而不是从/到substring:
<macrodef name="getsubstring">
<attribute name="src"/>
<attribute name="start"/>
<attribute name="length"/>
<attribute name="result"/>
<sequential>
<loadresource property="@{result}">
<string value="@{src}}" />
<filterchain>
<tokenfilter>
<replaceregex pattern="^.{@{start}}(.{@{length}}).*" replace="1" />
</tokenfilter>
</filterchain>
</loadresource>
</sequential>
</macrodef>
<property name="prop1" value="nameBLABLABLA" />
<getsubstring src="${prop1}" start="0" length="4" result="p"/>
<echo message="${p}" />