web-dev-qa-db-ja.com

Antの警告: "'includeantruntime'が設定されていませんでした"

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

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

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

388
user496949

Antランタイム

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

382
Daniel Kutik

@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は世界的に適用され、すべてのプロジェクトで警告をほとんど抑制します。

69
jwfearn

Chet Hosey はここにNice説明 を書きました

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

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

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

あなたがこの警告を見ることに苛立ちを感じているように、あなたのビルドが完全に壊れたならば、あなたはさらに不幸になるでしょう。このデフォルトの動作を維持することで、変更されていないビルドファイルをAntのバージョン間で一貫して動作させることができます。

60
kgiannakakis

ダニエルからの答えは完璧に機能します。これが私の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>
26
Krishnam Raju

あなたが私がコマンドラインから働いているのが好きなら、素早い答えは実行されています

export ANT_OPTS=-Dbuild.sysclasspath=ignore

その後、もう一度Antスクリプトを実行してください。

5
slott

Build.xmlファイルで<property name="build.sysclasspath" value="last"/>を使用する

詳細については、 Ant javacincludeAntRuntimeを検索してください。

他の可能な値はここで見つけることができます ここで

5
Ahmad Nadeem