使用Ant从exec输出中过滤换行符

时间:2015-09-16 12:44:52

标签: svn ant

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

几天前,其中一个目标破了。它调用svnversion并将版本写入.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上运行。我只是想替换任何&#34; \ n&#34;或&#34; \ n \ r&#34;什么都没有。

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

2 个答案:

答案 0 :(得分:2)

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

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

即可

答案 1 :(得分:1)

一种通用的方法是使用loadresource基于改变的exec outputproperty来创建一个新属性,例如。 :

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

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