次のような警告が表示されます。
[javac] build.xml:9: warning: 'includeantruntime' was not set,
defaulting to build.sysclasspath=last; set to false for repeatable builds
これは何を意味するのでしょうか?
includeantruntime="false"
を設定するだけです。
<javac includeantruntime="false" ...>...</javac>
javac
-タスクを複数回使用する必要がある場合は、常にincludeantruntime="false"
を設定する独自のPreSetDef
-タスクを定義するために javac
を使用することを検討してください。
http://www.coderanch.com/t/503097/tools/warning-includeantruntime-was-not-set から]:
これは、Ant 1.8で導入された間違いによって引き起こされています。その名前の属性をjavacタスクに追加し、それをfalseに設定して、それが起こったことを忘れてください。
http://ant.Apache.org/manual/Tasks/javac.html から:
Antランタイムライブラリをクラスパスに含めるかどうか。 build.sysclasspathが設定されていない限り、デフォルトはyesです。通常、これをfalseに設定して、スクリプトの動作がそれが実行される環境に影響されないようにするのが最善です。
@Daniel Kutikが述べたように、 presetdef
は良い選択肢です。特に、編集できない、または編集したくないbuild.xml
ファイルが多数あるプロジェクトで作業している場合(たとえば、第三者からのファイル)
presetdef
を使用するには、最上位のbuild.xml
ファイルに次の行を追加します。
<presetdef name="javac">
<javac includeantruntime="false" />
</presetdef>
今後のすべてのjavac
タスクは、基本的にincludeantruntime="false"
を継承します。プロジェクトに実際にantランタイムライブラリが必要な場合は、それらをビルドファイルOR set includeantruntime="true"
に明示的に追加することもできます。後者も警告を取り除きます。
後続のjavac
タスクは、必要に応じてこれを明示的に変更できます。次に例を示します。
<javac destdir="out" includeantruntime="true">
<src path="foo.Java" />
<src path="bar.Java" />
</javac>
ANT_OPTS
の使用はお勧めしません。それは機能しますが、それは警告の目的を無効にします。この警告は、自分のビルドが他のシステムでは動作が異なる可能性があることを伝えています。 ANT_OPTS
を使用すると、これがさらに起こりやすくなります。これは、すべてのシステムがANT_OPTS
を同じ方法で使用する必要があるためです。また、ANT_OPTS
は世界的に適用され、すべてのプロジェクトで警告をほとんど抑制します。
Chet Hosey はここにNice説明 を書きました :
歴史的に、Antは常にjavacタスクで利用できるようになったクラスパスにそれ自身のランタイムを含めました。そのため、Antに含まれているすべてのライブラリ、およびantが利用可能なライブラリは、好きかどうかにかかわらず、自動的にビルドのクラスパスに含まれます。
これはおそらくほとんどの人が望んでいたものではないと判断されました。だから今それのためのオプションがあります。
「true」を選択した場合(includeantruntimeの場合)、少なくともビルドクラスパスにAntランタイムが含まれることがわかります。 "false"を選択した場合は、ビルド動作が旧バージョンと1.8以降のバージョンの間で変わるという事実を受け入れています。
あなたがこの警告を見ることに苛立ちを感じているように、あなたのビルドが完全に壊れたならば、あなたはさらに不幸になるでしょう。このデフォルトの動作を維持することで、変更されていないビルドファイルをAntのバージョン間で一貫して動作させることができます。
ダニエルからの答えは完璧に機能します。これが私のbuild.xmlに追加したサンプルスニペットです:
<target name="compile">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="false">
<!-- ^^^^^^^^^^^^^^^^^^^^^^^^^ -->
<classpath>
<path id="application" location="${jar.dir}/${ant.project.name}.jar"/>
<path id="junit" location="${lib.dir}/junit-4.9b2.jar"/>
</classpath>
</javac>
</target>
あなたが私がコマンドラインから働いているのが好きなら、素早い答えは実行されています
export ANT_OPTS=-Dbuild.sysclasspath=ignore
その後、もう一度Antスクリプトを実行してください。