Ant verwendet eine falsche Java-Version


74

Ich verwende Ant 1.7.0 und installiere Java 1.6 in JAVA_HOME.

Ich möchte ein Projekt mit Java 1.5 erstellen, daher habe ich JAVA_HOME als mein Java 1.5-Verzeichnis exportiert.

java -version

sagt "1.5". Wenn ich Ant starte, wird Java 1.6 verwendet.


3
Welches Betriebssystem verwenden Sie?
Jon Skeet

1
Sie können ein Batch-Skript schreiben, um genau anzugeben, wie es ausgeführt werden soll. Wenn es nur kompiliert wird, können Sie die Version im Befehl angeben, wie: <javac target = "1.5" srcdir = ... />
James Oravec

Antworten:


73

Hatte gerade dieses Problem, es geschah, weil ich die Build-Datei zum ersten Mal zur Ant-View hinzugefügt hatte, als die Standard-JRE 1.6 war.

Es gab keine projektspezifische JRE und ich habe die Standardeinstellung auf 1.5 geändert, sogar Eclipse wurde in 1.5 ausgeführt, und JAVA_HOME war ebenfalls 1.5. Beim Ausführen des Ant-Ziels über die Befehlszeile wurde JRE 1.5 verwendet, in Eclipse jedoch weiterhin 1.6.

Ich musste mit der rechten Maustaste auf das Ameisenziel klicken, Ausführen als ... auswählen und die JRE auf der Registerkarte JRE ändern. Diese Einstellung wird für nachfolgende Läufe gespeichert.


7
Ich habe gerade festgestellt, dass in der Frage Eclipse überhaupt nicht erwähnt wurde. Meine Antwort ist für das beschriebene Problem bei der Verwendung von Eclipse.
Lee Kowalkowski

2
Vielen Dank, dass Sie ein paar Stunden der Frustration beendet haben.
Dark Star1

Wenn Sie Eclipse nicht verwenden, lesen Sie meine Antwort unten.
Utsav Gupta

Ich finde es toll, wie viele Fragen auf die verschiedenen Umgebungen und Einstellungen unserer Benutzer beantwortet werden können.
Perdomoff

33

In Eclipse:

  • Klicken Sie mit der rechten Maustaste auf Ihre build.xml

  • Klicken Sie auf "Ausführen als" und dann auf "Externe Toolkonfigurationen ...".

  • Wählen Sie die Registerkarte JRE . Wählen Sie die JRE aus, die Sie verwenden.

Führen Sie die Aufgabe erneut aus. Es sollte jetzt in Ordnung sein.


21

Laut Ameisenhandbuch sollte die Einstellung JAVA_HOME funktionieren. Sind Sie sicher, dass die geänderte Einstellung für Ameise sichtbar ist?

Alternativ können Sie die Variable JAVACMD verwenden.


2
Ich habe dieses Problem selbst atm und JAVA_HOME zeigt auf das richtige JDK, jedoch meldet ant immer noch die falsche Java-Version.
Dark Star1

JAVACMD als vollständiger Pfad zur ausführbaren Datei java.exe funktionierte für mich (Win 10)
kamil.ka

16

Sie können die Ziel- und Quelleneigenschaften des Javac-Tags verwenden, um eine Ziellaufzeit festzulegen. Im folgenden Beispiel wird jeder Quellcode auf die Zielversion 1.4 eines Compilers kompiliert, der Version 1.4 oder höher unterstützt.

<javac compiler="classic" taskname="javac" includeAntRuntime="no" fork=" deprecation="true" target="1.4" source="1.4" srcdir="${src}" destdir="${classes}">

Hinweis: 'srcdir' und 'destdir' sind Eigenschaftswerte, die an anderer Stelle im Build-Skript festgelegt wurden, z <property name="classes" value="c:/classes" />


15

Führen Sie ant im ausführlichen Modus aus: ant -vund suchen Sie nach Hinweisen.


1
Das hat mir sehr geholfen. Ich habe zuerst versucht, ein Projekt mit jdk 1.8 in eine Bibliothek zu integrieren. Ich entdeckte später, dass ich es stattdessen auf 1.7 bauen musste, also installierte ich jdk 1.7, änderte JAVA_HOME, aber Ant baute es immer noch mit 1.8. Mit habe ant -vich festgestellt, dass ant jdk1.7 korrekt verwendet, aber beim Build wurden alle Klassen im temporären Ordner weggelassen, da sie aufgrund meines vorherigen Versuchs bereits vorhanden waren. Also habe ich nur den temporären Ordner gelöscht und neu erstellt, diesmal mit jdk 1.7, wie ich es wollte. Könnte jemandem helfen
Mauro Banze

11

Sie können dies mit den folgenden Schritten erreichen, wenn Sie Eclipse IDE verwenden:

  1. Klicken Sie mit der rechten Maustaste auf die Aufgabe in Ihrer Ant-Build-Datei ( build.xml).

  2. Klicken Sie mit der Maus über "Ausführen als" auf "Externe Werkzeugkonfigurationen ...".

  3. Fügen Sie "Argumente" Folgendes hinzu:

    -Dant.build.javac.target=1.5 -Dant.build.javac.source=1.5
    

6

Datei erstellen:

<target name="print-version"> 
   <echo>Java/JVM version: ${ant.java.version}</echo> 
   <echo>Java/JVM detail version: ${java.version}</echo> 
</target>

Ausgabe:

[echo] Java/JVM version: 1.5
[echo] Java/JVM detail version: 1.5.0_08

5

Sie können in einer Javac-Aufgabe auch angeben, welche Kompatibilitätsstufe (1.4, 1.5, 1.6) Sie verwenden möchten. Sie können die Werte für die Quell- und Zielstufe festlegen. Überprüfen Sie die Dokumente hier: Dokumentation zur Javac-Aufgabe


1
-bootclasspathFügen Sie beim Kompilieren auch die Option hinzu, um die Kompatibilität zu gewährleisten .
Andrew Thompson

5

Dies ist eine ziemlich alte Frage, aber ich werde meine Notizen für zukünftige Referenzen hinzufügen.

Ich hatte ein ähnliches Problem und habe es behoben, indem ich die Reihenfolge der Exporte in der Variablen PATH geändert habe.

Zum Beispiel habe ich eine Methode zum Verketten von Zeichenfolgen mit meinem PATH verwendet (dies ist nur ein Beispiel):

$> export PATH='$PATH:'$JAVA_HOME

Wenn meine Variable PATH bereits ein Java enthalten würde, wäre der letzte Wert bedeutungslos, daher wäre die Reihenfolge von Bedeutung. Um dies zu lösen, begann ich es zu invertieren, indem ich zuerst meine Variable und dann den Pfad hinzufügte.

Nach dieser Idee habe ich die Reihenfolge umgekehrt, in der ANT_HOME exportiert wurde. Hinzufügen von JAVA_HOME vor ANT_HOME.

Dies könnte nur ein Zufall sein, aber es hat bei mir funktioniert.


Das ist mir auch passiert. Ich war mir nicht sicher, welcher Eintrag mit JAVA_HOME in Konflikt stand, aber als ich ihn am Anfang des PFADS platzierte, funktionierte er.
Inversus


1

Wenn Sie Ant über Eclipse ausführen, verwendet die Eclipse jdk oder jre, die im Klassenpfad (Erstellungspfad) konfiguriert sind.


Ja, standardmäßig, aber es kann für jede Ant-Datei anders konfiguriert werden, daher kann es entscheidend sein, jede zu überprüfen ...
Nick Russler

7
Um sicher zu sein, welche Java-Version ant verwendet:<echo message="Ant java version: ${ant.java.version}" />
dmolony

Das Erlernen von $ {ant.java.version} war eine großartige Sache für mich, danke!
Javydreamercsw

Wo würde ich das in die build.xml setzen?
jesses.co.tt

1

Verwenden Sie die folgenden 2 Eigenschaften für das javacTag:

fork="yes"  
executable="full-path-to-the-javac-you-want-to-use".

Erläuterungen zu den Eigenschaften finden Sie hier


1

JAVACMDist eine Ameisenspezifische Umgebungsvariable. Ant doc sagt:

JAVACMD - vollständiger Pfad der ausführbaren Java-Datei. Verwenden Sie diese Option, um eine andere JVM als JAVA_HOME / bin / java (.exe) aufzurufen.

Wenn Ihr java.exevollständiger Pfad: lautet C:\Program Files\Java\jdk1.8.0_211\bin\java.exe, erstellen Sie eine neue Umgebungsvariable mit dem Namen JAVACMDund setzen Sie ihren Wert auf den genannten Pfad (einschließlich \java.exe). Beachten Sie, dass Sie Ihr Terminal (cmd, Powershell usw.) schließen müssen, damit die neue Umgebungsvariable wirksam wird.



0

Standardmäßig betrachtet die Ant die JRE als JRE-Version des Arbeitsbereichs. Sie müssen entsprechend Ihrer erforderlichen Version ändern, indem Sie die folgenden Schritte ausführen.

In Eclipse:

  • Klicken Sie mit der rechten Maustaste auf Ihre build.xml, klicken Sie auf "Ausführen als" und dann auf "Externe Toolkonfigurationen ...". Wählen Sie die Registerkarte JRE.

  • Wählen Sie die JRE aus, die Sie verwenden.

  • Führen Sie die Aufgabe erneut aus. Es sollte jetzt in Ordnung sein.


0

Legen Sie Ihre JAVA_HOMEUmgebungsvariable mit der erforderlichen Java - Version (in Ihrem Fall Java 1.5), dann in build.xmlGebrauch executable="${JAVA_HOME}/bin/javac"innerhalb <javac></javac>Tages.

Beispiel:

<target name="java compiler" description="Compiles the java code">
    <javac executable="${JAVA_HOME}/bin/javac" srcdir="./src" 
        destdir="${build.dir}/classes"> 
    </javac> 
</target>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.