Svn 使用Ant从exec输出筛选换行符

Svn 使用Ant从exec输出筛选换行符,svn,ant,Svn,Ant,我们的项目有一个庞大而古老的Ant构建文件 几天前,其中一个目标被攻破。它调用svversion,并将版本写入.java文件。突然,字符串中出现换行,编译器因以下原因而抱怨: String version = "Foo bar"; 我对Ant没有什么经验,而且我很难理解文档。我想某种“过滤链”会起作用,但我无法让它发挥作用 以下是构建目标: <target name="svnversion"> <exec executable="svnversion" dir="${b

我们的项目有一个庞大而古老的Ant构建文件

几天前,其中一个目标被攻破。它调用
svversion
,并将版本写入.java文件。突然,字符串中出现换行,编译器因以下原因而抱怨:

String version = "Foo
 bar";
我对Ant没有什么经验,而且我很难理解文档。我想某种“过滤链”会起作用,但我无法让它发挥作用

以下是构建目标:

<target name="svnversion">
  <exec executable="svnversion" dir="${basedir}" outputproperty="svnversion">
    <arg value="${basedir}"/>
    <arg value="/dev/projects/${project.name}/trunk/"/>
  </exec>
<echo message="svnversion ${svnversion}"/>

它在Windows上运行。我只想用零替换任何“\n”或“\n\r”

奇怪的是,如果我在cmd中手动运行
svversion
,我在输出中看不到换行符

svnversion --help
...
Valid options:
  -n [--no-newline]        : do not output the trailing newline

只需将
-n
添加到命令行选项中

就可以使用一种通用的方法基于修改后的exec outputproperty创建一个新属性,例如:

<loadresource property="foo">
 <propertyresource name="svnversion"/>
 <filterchain>
  <striplinebreaks/>
 </filterchain>
</loadresource>

<!-- new property foo without linebreak -->
<echo>$${foo} => ${foo}</echo>

$${foo}=>${foo}

接受答案bc。简单,容易,使用正确的工具。不需要通过一些复杂的Ant标记。10/10会再次问;)