gpt4 book ai didi

ant - 如何将属性转换为 任务的多个参数

转载 作者:行者123 更新时间:2023-12-04 05:59:27 28 4
gpt4 key购买 nike

我有一个包含多个值的属性,我想为属性中的每个值执行一个带有单独“-j”参数的命令。

例如。 <property name="arguments" value="foo bar hello world"/>
应该执行: mycommand -j foo -j bar -j hello -j world

我使用的是 Ant 1.7.1,所以我不能在 <arg> 上使用“前缀”属性(Ant 1.8) <exec> 的元素任务。

一种解决方法是手动将“-j”直接插入到属性中,然后使用 <arg> 的“line”属性。 :

<property name="args" value="-j foo -j bar -j hello -j world"/>
<exec executable="mycommand">
<arg line="${args}"/>
</exec>

...但我更喜欢让属性是一个没有嵌入参数的简单列表。

编辑 :实际上,我的参数是 XML 文件中的路径,因此更准确的参数列表是:
<property name="arguments" value="/foo/bar /hello/world /a/very/long/path"/>

我希望命令然后使用参数执行:“-j/foo/bar -j/hello/world -j/a/very/long/path”。请注意,即使在 Windows 下,斜杠仍然是正斜杠(这些是命令的参数,而不是文件名)。

最佳答案

为此,您可以使用 Ant 资源工具。

<property name="arg_list" value="foo bar hello world"/>    
<resources id="arguments">
<mappedresources>
<string value="${arg_list}" />
<filtermapper>
<replacestring from=" " to=" -j "/>
</filtermapper>
</mappedresources>
</resources>
<property name="arguments" value="-j ${toString:arguments}" />

以上将导致属性 arguments具有值 -j foo -j bar -j hello -j world ,然后可以在 exec 中使用 arg线。

或者 pathconvert task可以在这方面提供帮助:
<property name="arg_list" value="foo bar hello world"/>    
<pathconvert property="arguments" pathsep=" ">
<chainedmapper>
<flattenmapper />
<regexpmapper from="(.*)" to="-j \1" />
</chainedmapper>
<filelist files="${arg_list}" />
</pathconvert>

如果您有绝对路径,而不仅仅是列表中的字符串,则删除 flattenmapper .

如果您有相对路径,请替换 flattenmapper符合:
<globmapper from="${basedir}/*" to="*" />

以防止路径被转换为绝对路径。

如果 Windows 系统上的 arg_list 中有类似 UNIX 的路径,则 pathconvert 的默认设置将不起作用 - 路径将转换为 Windows 样式。相反,要处理列表,请使用:
<pathconvert property="arguments" pathsep=" " targetos="unix">
<chainedmapper>
<regexpmapper from="C:(.*)" to="-j \1" />
</chainedmapper>
<filelist files="${arg_list}" />
</pathconvert>

请注意 targetos设置和修改后的正则表达式映射器来自参数。

关于ant - 如何将属性转换为 <exec> 任务的多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9100579/

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