我们的项目有一个庞大而老的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
,我就不会在输出中看到换行符...
答案 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>