4

私はもともとこれを持っていました:

<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&#13;&#10;
     This is line #2&#13;&#10;
     This is line #3&#13;&#10;
 </echo>

そして得た:

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

私もこれを試しました:

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

それでも得た:

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

これらのいずれかをコンソールに実行すると、別の行に出力されます。それらをファイルに保存すると、行が表示されません。

私はWin7、Ant 1.8を使用しています。

何か案は?


窓のこと?

Macでこれらのそれぞれを試しました。最初のものは私に同じ結果を与えました。ただし、2 番目の方法では、ファイルに 3 行が含まれていました。追加された 3 番目の方法では、${line.separator}1 行おきにスキップされます。4 番目の使用方法で&#13;&10;は、1 行おき^Mに末尾に a が付きます (結局のところ、Mac は Unix であり、末尾に CRLF を使用せず、LF のみを使用します)。

そして、<concat>作成した別の行も使用します。


詳しくは

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>、ファイルを書き込んだ後に 3 つのタスクを実行することです。3 つの antcall タスクにはすべてif句があるため、設定されているプロパティに基づいて実行される場合と実行されない場合があります。これは私たちの開発チーム向けのビルド テンプレートなので、ぜひ機能させたいと思っています。

<antcall>が問題を引き起こしているのはなぜですか。ところで、ときどき壊れてしまうことがあるので、機能させるために新しいコンソール ウィンドウを再度開く必要がありますNL

以前に同様の問題に遭遇したことがありますが、それは Windows コードページの問題でした。

4

2 に答える 2

2

以下の Ant プロジェクトは、echoタスクを使用して 4 つのファイルを作成します。

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

Ant 1.8.x を使用して Windows 7 でプロジェクトを実行した場合、各ファイルの 16 進表示は次のようになります。

// 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

message[ で区切られた属性に 3 行すべてを配置する] echo4.txt のみが${line.separator}、Windows で正しい行末 (キャリッジ リターン + ライン フィード) を生成します。プロジェクト ファイルをメモ帳 (キャリッジ リターン + ライン フィードを使用) で編集した場合と、Unix の改行を保持するエディター (単一のライン フィード) で編集した場合の出力は同じでした。Ant が XML ファイルを解析するとき、行末は 1 つの改行文字に正規化されるようです。

アリプロジェクト

<?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>
于 2012-08-07T05:44:25.190 に答える
1

\nラインブレーカーとして試しましたか?

于 2012-08-06T22:12:55.223 に答える