如何将 ant expandproperties 与 windows pathseparator 一起使用

Posted

技术标签:

【中文标题】如何将 ant expandproperties 与 windows pathseparator 一起使用【英文标题】:How to use ant expandproperties with windows pathseparator 【发布时间】:2014-12-23 18:10:46 【问题描述】:

我尝试使用蚂蚁loadpropertiesexpandproperties: 这适用于简单的文本属性,但当属性包含 Windows 路径时,我会得到奇怪的结果。

<property name="myAntFile" value="$ant.file" />

<loadproperties srcFile="my.properties">
    <filterchain>
        <expandproperties />
    </filterchain>
</loadproperties>

<echo message="$$external = $external"  />

属性文件如下所示:

external=$myAntFile

结果是:

Buildfile: C:\projects\trunk\build.xml
...
[echo] $external = C:projects\trunkbuild.xml

我知道对于属性文件,escape rules 用于反斜杠和特殊空白字符。但是我不明白如何将 buildscripts 属性翻译成特殊含义。

任何人都知道如何解决这个问题,或者这是一个 ant 错误(也许 expandproperties 链在属性文件上下文中使用时应该获得一个额外的属性用于转义?)?

【问题讨论】:

究竟是什么问题,你想完成什么? Windows 路径是否仅在回显它们时引起问题,或者在确定文件/目录/等时它们不起作用? 【参考方案1】:

使用 ant,您可以在定义路径时使用正斜杠 / 作为路径分隔符,即使在 Windows 上也是如此:C:/projects/trunk/build.xml

如果$ant.file 使用反斜杠返回路径,请先转换此路径,然后再加载属性文件。

不幸的是,我还没有找到将路径从C:\a\path 转换为C:/a/path 并返回的明确方法。据说pathconvert 可以解决问题...

<pathconvert targetos="unix" property="myAntFile.withForwardSlashes">
    <path location="$myAntFile"/>
</pathconvert>

...但它混淆了相对路径和绝对路径,我无法在我的 OS X 机器上测试它。

【讨论】:

感谢您的回答。我知道正斜杠也在 Windows 上工作,但我正在寻找一个通用的解决方案。 $ant.file 属性只是一个例子。在我的构建过程中,实际上有几十个文件基础属性,其中一些我的构建脚本甚至都不知道,所以试图转换它们以防万一用户维护的属性文件使用它们是徒劳的。即使我尝试属性文件编辑器也必须知道这种特殊处理...... 我明白了。尽管如此,一般的解决方案必须是自动转换 Windows 路径,因为通常在反斜杠引起麻烦的情况下使用它们之前转换它们比在这些情况下尝试抑制反斜杠的转义更容易。 是的,毕竟这不仅与windwos路径有关,还与所有包含需要在属性文件中转义的字符序列的字符串有关。在这种情况下,Expandproperties 绝不是人们期望的文本替换...

以上是关于如何将 ant expandproperties 与 windows pathseparator 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

Powershell 查询信息中如何将内容过多的省略号(....)显示完整

Powershell 查询信息中如何将内容过多的省略号(....)显示完整

ANT - 我如何无法将文件移动到 JAR

如何将 ant-contrib.jar 与竹子一起使用?

如何将 Ant 项目转换为 Maven 项目

如何使用 ANT 任务从 SVN 结帐?