Ich erhalte die folgende Warnung:
[javac] build.xml:9: warning: 'includeantruntime' was not set,
defaulting to build.sysclasspath=last; set to false for repeatable builds
Was bedeutet das?
Ich erhalte die folgende Warnung:
[javac] build.xml:9: warning: 'includeantruntime' was not set,
defaulting to build.sysclasspath=last; set to false for repeatable builds
Was bedeutet das?
Einfach einstellen includeantruntime="false"
:
<javac includeantruntime="false" ...>...</javac>
Wenn Sie die javac
-Aufgabe mehrfach zu erledigen, sollten Sie vielleicht die Verwendung von PreSetDef
Ihr eigenes zu definieren javac
-Aufgabe, die immer die includeantruntime="false"
.
Von http://www.coderanch.com/t/503097/tools/warning-includeantruntime-was-not-set :
Das ist auf einen Fehler zurückzuführen das in Ant 1.8 eingeführt wurde. Fügen Sie einfach ein Attribut mit diesem Namen zur javac Aufgabe hinzu, setzen Sie es auf false und vergessen Sie, dass es jemals passiert ist.
Von http://ant.apache.org/manual/Tasks/javac.html :
Ob die Ant-Laufzeit einbezogen werden soll Bibliotheken in den Klassenpfad aufgenommen werden; die Vorgabe ist auf ja, es sei denn, build.sysclasspath ist gesetzt ist. Es ist normalerweise am besten, dies auf false zu setzen, damit das Verhalten des Skripts nicht empfindlich auf die Umgebung reagiert, in der es ausgeführt wird.
Wie @Daniel Kutik erwähnte, presetdef
ist eine gute Option. Vor allem, wenn man an einem Projekt mit vielen build.xml
Dateien, die man nicht bearbeiten kann oder möchte (z. B. Dateien von Dritten).
Zu verwenden presetdef
fügen Sie diese Zeilen in Ihr Top-Level build.xml
Datei:
<presetdef name="javac">
<javac includeantruntime="false" />
</presetdef>
Nun werden alle nachfolgenden javac
Aufgaben werden im Wesentlichen erben includeantruntime="false"
. Wenn Ihre Projekte tatsächlich Ant-Laufzeitbibliotheken benötigen, können Sie diese entweder explizit zu Ihren Build-Dateien hinzufügen ODER die includeantruntime="true"
. Letzteres wird auch Warnungen beseitigen.
Nachfolgend javac
Die Aufgaben können dies noch explizit ändern, wenn dies gewünscht wird, zum Beispiel:
<javac destdir="out" includeantruntime="true">
<src path="foo.java" />
<src path="bar.java" />
</javac>
Ich würde von der Verwendung von ANT_OPTS
. Das funktioniert, aber es verfehlt den Zweck der Warnung. Die Warnung sagt einem, dass das eigene Gebäude puede sich auf einem anderen System anders verhalten. Verwendung von ANT_OPTS
macht dies noch wahrscheinlicher, da nun jedes System die ANT_OPTS
auf dieselbe Weise. Auch, ANT_OPTS
gilt global und unterdrückt Warnungen in allen Ihren Projekten
Chet Hosey schrieb eine schöne Erklärung aquí :
In der Vergangenheit hat Ant immer seine eigene Laufzeitumgebung in den Klassenpfad aufgenommen, der der javac-Aufgabe zur Verfügung gestellt wurde. Daher sind alle Bibliotheken, die in Ant enthalten sind, und alle Bibliotheken, die für Ant verfügbar sind, automatisch im Klassenpfad Ihres Builds, ob Sie es wollen oder nicht.
Es wurde beschlossen, dass dies wahrscheinlich nicht das war, was die meisten Menschen wollten. Deshalb gibt es jetzt eine Option dafür.
Wenn Sie "true" (für includeantruntime) wählen, dann wissen Sie zumindest, dass Ihr Build-Klassenpfad die Ant-Laufzeitumgebung enthält. Wenn Sie "false" wählen, akzeptieren Sie die Tatsache, dass sich das Build-Verhalten zwischen älteren Versionen und 1.8+ ändern wird.
So sehr Sie sich über diese Warnung ärgern, so wenig freuen würden Sie sich, wenn Ihre Builds komplett kaputt gehen würden. Die Beibehaltung dieses Standardverhaltens ermöglicht es, dass unveränderte Build-Dateien zwischen verschiedenen Versionen von Ant konsistent funktionieren.
Die Antwort von Daniel ist genau richtig. Hier ist ein Beispiel Snippet, das ich zu meinem build.xml hinzugefügt:
<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>
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.