ant警告:「 'includeantruntime'が設定されていませんでした」


397

次の警告が表示されます。

[javac] build.xml:9: warning: 'includeantruntime' was not set, 
defaulting to build.sysclasspath=last; set to false for repeatable builds

これは何を意味するのでしょうか?

回答:


388

Antランタイム

単に設定する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に設定して、スクリプトの動作が実行環境に影響されないようにするのが最善です。


2010年12月20日にコンパイルされたApache Ant(TM)バージョン1.8.2
user496949

したがって、クラスパスでantランタイムが必要な場合は、yes / trueに設定し、それ以外の場合はno / falseに設定します。あなたはそれを必要としないと思います。
Daniel Kutik、2011

5
+1、すばらしい答え。すべてのjavac呼び出しを散らかす代わりに、ビルドファイルのどこかに一度設定できればいいのに...
Jonik

1
Trueに設定されている場合はどうなりますか?
Lorenzo Lerate 2016

「Antランタイムライブラリをクラスパスに含めるかどうか。build.sysclasspathが設定されていない限り、デフォルトはyesです。通常、これをfalseに設定して、スクリプトの動作が実行環境に影響されないようにするのが最善です。 」
Daniel Kutik、2016年

72

@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すべてのプロジェクトで警告を抑制し、グローバルに適用します


1
既存のAntビルドファイルを複数のjavacタスクで改造するのに最適です。presetdef要素は、プロジェクト要素のすぐ内側に入ります。
saxman

@jwfearn:presetdef非組み込みのAntタスクで同様のトリックを機能させることはできますか?私はでこれを試しましたscalacが、下位build.xmlファイルはscalacタスクを手動で定義する必要があるため、トップレベルで設定したものはすべて上書きされます。
スチュアートゴロデッツ

2
presetdefを使用すると、javacタスクが再定義されたというant警告が発生することに注意してください。各javacタスクにaddind includeantruntimeを使用すると、これを回避できます。警告のマイナス面は知りません。しかし、これはクリーンビルドを「必要とする」人々にとっては有用かもしれません。
mikijov 2012

はい、presetdefは「タスクjavacの古い定義を上書きしようとしています」
mike jones

62

Chet Hoseyここで素晴らしい説明を書きました

歴史的に、Antは常にjavacタスクで使用できるようにしたクラスパスに独自のランタイムを含めていました。そのため、Antに含まれているライブラリ、およびantで使用できるライブラリは、好きかどうかにかかわらず、自動的にビルドのクラスパスに含まれます。

これはおそらくほとんどの人が望んでいたものではないと決定されました。だから今それのためのオプションがあります。

「true」(includeantruntimeの場合)を選択すると、少なくともビルドクラスパスにAntランタイムが含まれることがわかります。「false」を選択すると、ビルドの動作が古いバージョンと1.8以降で異なるという事実を受け入れます。

この警告が表示されるのと同じようにイライラするので、ビルドが完全に壊れてしまうと、さらに不満を感じるでしょう。このデフォルトの動作を維持すると、変更されていないビルドファイルがAntのバージョン間で一貫して機能するようになります。


3
これはこれまでで最も愚かな機能/メッセージだといつも思っていました。構成管理ツールで「反復可能なビルド」を望んでいるのは誰ですか?;)
karmakaze 2012年

1
この答えは、警告が実際に何を意味するかを私たちに伝える唯一のものであるようです。
2018年

26

ダニエルの答えは完璧に機能します。以下は、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>

5

私がコマンドラインから作業するのが好きなら、迅速な答えは

export ANT_OPTS=-Dbuild.sysclasspath=ignore

その後、antスクリプトを再度実行します。


これは私にとても役立ちます。私は使用していset ANT_OPTS=-Xms40M -Xmx512M -Dbuild.sysclasspath=ignoreます。
Paul Vargas


-3

私もこれに直面し、プログラムと機能にチェックインします。Eclipseのantの古い設定(jdk1.6.0)と互換性のないjdk1.8の更新がインストールされました。そのアップデートをインストールします。今のところ、私のantプロジェクトはビルドの成功です。

ぜひお試しください。これがお役に立てば幸いです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.