Ant在回应文件时不会创buildNL

我原本是这样的:

<echo file="${my.file}" message="This is line #1"/> <echo file="${my.file}" append="true" message="This is line #2"/> <echo file="${my.file}" append="true" message="This is line #3"/> 

并在我的文件中得到这个:

  This is line#1This is line #2This is line#3 

所以,我试过了:

  <echo file="${my.file}"> This is line #1 This is line #2 This is line #3 </echo> 

得到:

  This is line#1This is line #2This is line#3 

我做到了这一点:

  <echo file="${my.file}"> This is line #1${line.separator} This is line #2${line.separator} This is line #3${line.separator} </echo> 

得到:

  This is line#1This is line #2This is line#3 

我做到了这一点:

  <echo file="${my.file}"> This is line #1
 This is line #2
 This is line #3
 </echo> 

得到:

  This is line#1This is line #2This is line#3 

我甚至试过这个:

  <concat destfile="${my.file}"> This is line #1
 This is line #2
 This is line #3
 </concat> 

还有:

  This is line#1This is line #2This is line#3 

如果我对控制台执行了这些操作,它将在单独的行上进行打印。 将它们保存到一个文件,并不显示行。

我在Win7上,ant1.8的东西。

有任何想法吗?


Windows的事情?

我已经在我的Mac上尝试了这些。 第一个给了我相同的结果。 然而,第二种方式给了我三行文件。 添加了${line.separator}的第三种方式是每隔一行跳过一次。 第四种使用 &10; 最后给了我一个^M所有其他行(毕竟,Mac是Unix,不使用CRLF结尾,而只是LF)。

而且,使用<concat>也创build了单独的行。


更多信息

我已经追溯到我的build.xml文件下面的代码片段:

这工作如广告。 也就是说,在结果文件中会出现空白和NL

 <target name="package" depends="-resolve,compile" description="Packaging of the artifact"> <!-- Build version.txt and let the user figure out how to use it --> <mkdir dir="${target.dir}"/> <echo file="${version.file}"> Jenkins Project: ${env.JOB_NAME} Jenkins Build Number: ${env.BUILD_NUMBER} Build Date: ${build.date} </echo> <!-- <antcall target="jar"/> <antcall target="war"/> <antcall target="ear"/> --> </target> 

这不:

 <target name="package" depends="-resolve,compile" description="Packaging of the artifact"> <!-- Build version.txt and let the user figure out how to use it --> <mkdir dir="${target.dir}"/> <echo file="${version.file}"> Jenkins Project: ${env.JOB_NAME} Jenkins Build Number: ${env.BUILD_NUMBER} Build Date: ${build.date} </echo> <antcall target="jar"/> <antcall target="war"/> <antcall target="ear"/> </target> 

这些片段之间的唯一区别在于我在写入文件之后执行了三个<antcall>任务。 这三个antcall任务都有一个if子句,所以它们可能会或可能不会根据所设置的属性来运行。 这是我们的开发团队的构build模板,所以我真的想要得到这个工作。

为什么<antcall>会导致问题。 顺便说一句,有时它是如此的破碎,我需要重新打开一个新的控制台窗口,以获得NL东西工作。

我以前遇到类似的问题,这是一个Windows代码页问题。

下面的Ant项目使用echo任务创建四个文件:

  • echo1.txt
  • echo2.txt
  • echo3.txt
  • echo4.txt

在使用Ant 1.8.x的Windows 7上运行项目时,每个文件的十六进制视图如下所示:

 // echo1.txt // HEX // TEXT 6c 69 6e 65 20 23 31 line #1 6c 69 6e 65 20 23 32 line #2 6c 69 6e 65 20 23 33 line #3 // echo2.txt // HEX // TEXT 6c 69 6e 65 20 23 31 0a line #1 (0a => line feed) 6c 69 6e 65 20 23 32 0a line #2 6c 69 6e 65 20 23 33 0a line #3 // echo3.txt // HEX // TEXT 6c 69 6e 65 20 23 31 0d 0a 0a line #1 (0d => carriage return) 6c 69 6e 65 20 23 32 0d 0a 0a line #2 6c 69 6e 65 20 23 33 0d 0a 0a line #3 // echo4.txt // HEX // TEXT 6c 69 6e 65 20 23 31 0d 0a line #1 6c 69 6e 65 20 23 32 0d 0a line #2 6c 69 6e 65 20 23 33 0d 0a line #3 

只有echo4.txt [将message属性中的所有三行放在${line.separator}分隔]才能在Windows上生成正确的行(回车+换行)。 在记事本(使用回车+换行符)编辑项目文件时,输出结果与保存Unix行结束的编辑器(单行换行)相同。 看来,当Ant解析XML文件时,行结束符被标准化为一个换行符。

蚂蚁项目

 <?xml version="1.0" encoding="UTF-8"?> <project name="echo-project" basedir="." default="echo-all"> <target name="echo-test1"> <property name="echo1.file" location="${basedir}/echo1.txt" /> <echo file="${echo1.file}" message="line #1" /> <echo file="${echo1.file}" message="line #2" append="true" /> <echo file="${echo1.file}" message="line #3" append="true" /> </target> <target name="echo-test2"> <property name="echo2.file" location="${basedir}/echo2.txt" /> <echo file="${echo2.file}">line #1 line #2 line #3 </echo> </target> <target name="echo-test3"> <property name="echo3.file" location="${basedir}/echo3.txt" /> <echo file="${echo3.file}">line #1${line.separator} line #2${line.separator} line #3${line.separator} </echo> </target> <target name="echo-test4"> <property name="echo4.file" location="${basedir}/echo4.txt" /> <echo file="${echo4.file}" message= "line #1${line.separator}line #2${line.separator}line #3${line.separator}" /> </target> <target name="echo-all" depends="echo-test1, echo-test2, echo-test3, echo-test4" /> </project> 

您是否尝试过\n作为断路器?