gpt4 book ai didi

ant - 如何在ant任务中正确引用路径?

转载 作者:行者123 更新时间:2023-12-02 19:13:08 25 4
gpt4 key购买 nike

我要调用<proguard> Ant 中的任务,需要将其传递给各种 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),处理以下事实:路径分隔符发生变化,但没关系,ant 脚本中的某处有一个常量。

[更新]感谢@martin的回答,我找到了使用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 。路径转换为每个路径调用映射器链。如果正则表达式匹配,则采用该标识,否则采用该标识。正则表达式只是说,如果我们发现没有空格的内容后跟至少有一个空格的内容,则将其用双引号引起来。

最佳答案

一种选择是使用“完整 XML”proguard 任务,然后每个 jar 将是一个单独的元素,但通常为了渲染属性路径,您将使用 Ant pathconvert task 。例如:

<fileset id="some.classpath" dir=".">
...
</fileset>

<pathconvert property="injars.inner" refid="some.classpath" pathsep='"${path.separator}"' />
<property name="injars" value='"${injars.inner}"' />

请注意添加前导和尾随双引号 - pathsep 仅适用于路径的元素之间。然后按照您提到的方式使用它:

<proguard>
-injars ${injars}
</proguard>

关于ant - 如何在ant任务中正确引用路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5955831/

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