我想在Ant中调用<proguard>
任务,并且需要将路径传递给各种JAR文件,例如,相当于:如何正确引用蚂蚁任务中的路径?
<proguard>
-injars /some/path/jar1;/some other path/jar2
</proguard>
的问题是,有些路径可能含有空格或特殊字符,它们必须引用这样的proguard manual作为解释:
<proguard>
-injars /some/path/jar1;"/some other path/jar2"
</proguard>
它不工作引用整个论点,个别路径需要单独引用。我正在修改的ant文件使用属性将各种JAR路径传递给proguard,我的问题是如何正确引用-injars和-libraryjars的各个路径。例如:
<property name="libraryjars" refid="some.classpath" />
<proguard>
@${proguard.config}
-libraryjars ${libraryjars}
</proguard>
我只是修改了财产的样子:
<property name="libraryjars.unquoted" refid="some.classpath"/>
<property name="libraryjars" value="'${libraryjars.unquoted}'"/>
但是这仍然很脆弱,不是吗?有没有更好的办法?那么我有一个属性“path1; path2”的事实,我想拆分路径组件,分别引用它们并重新创建属性。我知道如何在shell脚本中做到这一点,但ant语法对我来说更加神秘:-)哦,当然它需要在所有平台(至少Windows,Mac和Linux)上工作,处理事实路径分隔符的变化,但这是好的在蚂蚁脚本中有一个常量。
[更新]感谢@马丁的回答,我找到了完美的方式做正是我想要使用pathconvert与内mapper chain:
<pathconvert property="dest.path" refid="source.path">
<firstmatchmapper>
<regexpmapper from='^([^ ]*)(.*)$$' to='"\1\2"'/>
<identitymapper/>
</firstmatchmapper>
</pathconvert>
这将C:\path\jar 1;C:\my path\jar2;C:\path\jar3
转换成"C:\path\jar 1";"C:\my path\jar2";C:\path\jar3
。路径转换为每个路径调用映射链。如果正则表达式匹配,则需要该身份。正则表达式只是说如果我们发现一些没有空格的东西,然后至少有一个空格,用双引号括起来。
您还可以添加所需的引号标签内: -injars“$ {} injars” –
2011-05-11 19:39:04
感谢@马丁。这是一个完美的指针,我通过阅读''文档找到了解决方案。 –
ralfoide
2011-05-12 22:21:07