412 Stimmen

Ameisenwarnung: "'includeantruntime' wurde nicht gesetzt"

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?

403voto

Daniel Kutik Punkte 6937

Ant Laufzeit

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" .

Zusätzliche Details

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.

75voto

jwfearn Punkte 27520

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

67voto

kgiannakakis Punkte 100768

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.

27voto

Krishnam Raju Punkte 271

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>

6voto

slott Punkte 3216

Wenn Sie wie ich von der Kommandozeile aus arbeiten, ist die schnelle Antwort die Ausführung von

export ANT_OPTS=-Dbuild.sysclasspath=ignore

Und führen Sie dann Ihr Ameisenskript erneut aus.

CodeJaeger.com

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.

Powered by:

X