Ich erhalte 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 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?
Antworten:
Einfach einstellen includeantruntime="false"
:
<javac includeantruntime="false" ...>...</javac>
Wenn Sie die javac
-task mehrmals verwenden müssen, sollten Sie in Betracht ziehen PreSetDef
, Ihre eigene javac
-task zu definieren , die immer festgelegt wird includeantruntime="false"
.
Von http://www.coderanch.com/t/503097/tools/warning-includeantruntime-was-not-set :
Dies ist auf eine in Ant 1.8 eingeführte Fehlfunktion zurückzuführen. Fügen Sie der Javac-Aufgabe einfach ein Attribut dieses Namens hinzu, setzen Sie es auf false und vergessen Sie, dass es jemals passiert ist.
Von http://ant.apache.org/manual/Tasks/javac.html :
Gibt an, ob die Ant-Laufzeitbibliotheken in den Klassenpfad aufgenommen werden sollen. Der Standardwert ist yes, es sei denn, build.sysclasspath ist festgelegt. Es ist normalerweise am besten, dies auf false zu setzen, damit das Verhalten des Skripts nicht von der Umgebung abhängt, in der es ausgeführt wird.
Wie @ Daniel Kutik erwähnte, presetdef
ist dies eine gute Option. Insbesondere, wenn man an einem Projekt mit vielen build.xml
Dateien arbeitet, die man nicht bearbeiten kann oder möchte (z. B. solche von Drittanbietern).
Fügen Sie zur Verwendung presetdef
die folgenden Zeilen in Ihre build.xml
Datei der obersten Ebene ein :
<presetdef name="javac">
<javac includeantruntime="false" />
</presetdef>
Jetzt werden alle nachfolgenden javac
Aufgaben 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 festlegenincludeantruntime="true"
. Letzteres wird auch Warnungen entfernen.
Nachfolgende javac
Aufgaben können dies bei Bedarf noch explizit ändern, zum Beispiel:
<javac destdir="out" includeantruntime="true">
<src path="foo.java" />
<src path="bar.java" />
</javac>
Ich würde gegen die Verwendung empfehlen ANT_OPTS
. Es funktioniert, aber es macht den Zweck der Warnung zunichte. Die Warnung weist darauf hin, dass sich der Build auf einem anderen System möglicherweise anders verhält. Die Verwendung ANT_OPTS
macht dies noch wahrscheinlicher, da jetzt jedes System auf ANT_OPTS
die gleiche Weise verwendet werden muss. Außerdem ANT_OPTS
gelten global, Warnungen nolens volens in allen Ihren Projekten zu unterdrücken
presetdef
Trick für nicht integrierte Ant-Aufgaben verwendet werden? Ich habe dies mit versucht scalac
, aber da niedrigere build.xml
Dateien die scalac
Aufgabe manuell definieren müssen , überschreiben sie alles, was ich auf der obersten Ebene festgelegt habe.
Chet Hosey schrieb eine schöne Erklärung hier :
In der Vergangenheit hat Ant immer eine eigene Laufzeit in den Klassenpfad aufgenommen, der der Javac-Task zur Verfügung gestellt wird. Alle in Ant enthaltenen Bibliotheken und alle für ant verfügbaren Bibliotheken befinden sich automatisch im Klassenpfad Ihres Builds, unabhängig davon, ob Sie es mögen oder nicht.
Es wurde entschieden, dass dies wahrscheinlich nicht das war, was die meisten Leute wollten. Jetzt gibt es eine Option dafür.
Wenn Sie "true" (für die Laufzeit) auswählen, wissen Sie zumindest, dass Ihr Build-Klassenpfad die Ant-Laufzeit enthält. Wenn Sie "false" wählen, akzeptieren Sie die Tatsache, dass sich das Build-Verhalten zwischen älteren Versionen und 1.8+ ändert.
So genervt Sie auch über diese Warnung sind, Sie wären noch weniger glücklich, wenn Ihre Builds vollständig kaputt gehen würden. Wenn Sie dieses Standardverhalten beibehalten, können unveränderte Build-Dateien zwischen Ant-Versionen konsistent funktionieren.
Die Antwort von Daniel funktioniert einfach perfekt. Hier ist ein Beispiel-Snippet, das ich meiner build.xml hinzugefügt habe:
<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>
Wenn Sie möchten, dass ich über die Befehlszeile arbeite, wird die schnelle Antwort ausgeführt
export ANT_OPTS=-Dbuild.sysclasspath=ignore
Führen Sie dann Ihr Ameisenskript erneut aus.
set ANT_OPTS=-Xms40M -Xmx512M -Dbuild.sysclasspath=ignore
.
Ich stand vor dem gleichen, ich checke in Programm und Funktion ein. Es wurde ein Update für jdk1.8 installiert, das nicht mit meiner alten Einstellung (jdk1.6.0) für ant in eclipse kompatibel ist. Ich installiere das Update. Im Moment ist mein Ameisenprojekt der Erfolg.
Probieren Sie es aus, hoffe, dies wird hilfreich sein.