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, presetdefist dies eine gute Option. Insbesondere, wenn man an einem Projekt mit vielen build.xmlDateien arbeitet, die man nicht bearbeiten kann oder möchte (z. B. solche von Drittanbietern).
Fügen Sie zur Verwendung presetdefdie folgenden Zeilen in Ihre build.xmlDatei der obersten Ebene ein :
<presetdef name="javac">
<javac includeantruntime="false" />
</presetdef>
Jetzt werden alle nachfolgenden javacAufgaben 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 javacAufgaben 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_OPTSmacht dies noch wahrscheinlicher, da jetzt jedes System auf ANT_OPTSdie gleiche Weise verwendet werden muss. Außerdem ANT_OPTSgelten global, Warnungen nolens volens in allen Ihren Projekten zu unterdrücken
presetdefTrick für nicht integrierte Ant-Aufgaben verwendet werden? Ich habe dies mit versucht scalac, aber da niedrigere build.xmlDateien die scalacAufgabe 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.