次の警告が表示されます。
[javac] build.xml:9: warning: 'includeantruntime' was not set,
defaulting to build.sysclasspath=last; set to false for repeatable builds
これは何を意味するのでしょうか?
次の警告が表示されます。
[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
-taskを複数回使用する必要がある場合は、常に設定PreSetDef
する独自のjavac
-taskの定義に使用することを検討してくださいincludeantruntime="false"
。
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ランタイムライブラリを必要とする場合は、それらをビルドファイルに明示的に追加するか、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
すべてのプロジェクトで警告を抑制し、グローバルに適用します
presetdef
非組み込みのAntタスクで同様のトリックを機能させることはできますか?私はでこれを試しましたscalac
が、下位build.xml
ファイルはscalac
タスクを手動で定義する必要があるため、トップレベルで設定したものはすべて上書きされます。
Chet Hoseyはここで素晴らしい説明を書きました:
歴史的に、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スクリプトを再度実行します。
set ANT_OPTS=-Xms40M -Xmx512M -Dbuild.sysclasspath=ignore
ます。
<property name="build.sysclasspath" value="last"/>
build.xmlファイルで使用する
詳細についてはincludeAntRuntime
、Ant javacを検索してください
他の可能な値はここにあります
私もこれに直面し、プログラムと機能にチェックインします。Eclipseのantの古い設定(jdk1.6.0)と互換性のないjdk1.8の更新がインストールされました。そのアップデートをインストールします。今のところ、私のantプロジェクトはビルドの成功です。
ぜひお試しください。これがお役に立てば幸いです。