javac1.8 Klasse nicht gefunden

80

Ich habe zwei jdks installiert - jdk 1.5 und jdk 1.8. Ich habe folgende Ant build.xml-Konfigurationsdatei:

<target name="compileCustomSrc">
    <javac srcdir="src" destdir="build/classes" source="1.5" target="1.5" >
        <classpath>
            <fileset dir="C:/lib/">
                <include name="*.jar" />
            </fileset>
        </classpath>
    </javac>
</target>

Vor der Installation von jdk1.8 hat Ant, das von Eclipse aufgerufen wurde, alle Quellen erfolgreich kompiliert. Aber jetzt habe ich folgende Fehlermeldung:

Klasse nicht gefunden: javac1.8

Mein JAVA_HOME und JRE_HOME:

JAVA_HOME = C: \ Programme (x86) \ Java \ jdk1.5.0_16
JRE_HOME = C: \ Programme (x86) \ Java \ jre1.5.0_16

und setzen Sie in Eclipse JRE auf 1.5. Setzt Java 1.8 während der Installation einige Konfigurationen?

kamilz
quelle

Antworten:

173
Klasse nicht gefunden: javac1.8

Es ist bekannt, dass dieser Fehler bei Apache Ant-Versionen unter 1.9.0 auftritt, die nicht mit Java 8 kompatibel sind. Wenn Sie eine Version von Ant <1.9.0 verwenden, sollten Sie auf eine Version 1.9.x aktualisieren.

Hier ist der zugehörige Fehlerbericht: https://issues.apache.org/bugzilla/show_bug.cgi?id=53347

Btw, wenn Sie mit Java 8 nur kompilieren wollen, aber keine aktuelle Java - 8 - Syntax kompilieren müssen, dann können Sie das folgende Argument an javac als geben Abhilfe , die Sie mit einer älteren Version von Ant weiterhin erlauben würde , ::

-Dbuild.compiler=javac1.7
Kristian Holdhus
quelle
9
Ich bin auf dieses Problem gestoßen, und das angegebene Flag ( -Dbuild.compiler=javac1.7) funktioniert auch, wenn es direkt an übergeben wird ant.
Cincodenada
Kristians Antwort ist richtig, wir könnten -Dbuild.compiler = javac1.7 hinzufügen, wenn wir die Ant-Launch-Konfiguration in Eclipse generieren. Siehe < bugs.eclipse.org/bugs/show_bug.cgi?id=409358 >
Shiva Achari
5
Ich habe den Code gefunden . Sie testen, ob Sie Java 1.3 oder niedriger verwenden. Alter, alter Code von vor über einem Jahrzehnt. Aus diesem Grund bricht Ant jedes Mal ab, wenn Oracle eine neue 1.x-Version herausbringt. Ameise benötigt bereits 1.4 oder höher. Sie sollten diese Prüfung einfach aus dem Code entfernen.
David W.
3
@ David W - warum zum Teufel haben sie keine Unterstützung für Java 1.9 und 2.0 hinzugefügt, damit die Änderungen für die nächsten 6 oder 8 Jahre funktionieren. Java 9 wird bald herauskommen und alles wird wieder kaputt gehen ....
jww
2
Der Fehler wurde 2012 für Eclipse's Ant 1.9.0 behoben, aber Ant in Eclipse Kepler (2014!) Ist immer noch bei 1.8.4 und daher besteht dieses Problem immer noch. Wird dies in Luna aktualisiert oder warten wir noch? (Ich finde die Eclipse-Website völlig nutzlos für jede Art von ordnungsgemäßer Änderungsverfolgung und für das Wissen, welche Versionen welcher Plugins in welchen Releases enthalten sind; gibt es diese irgendwo?)
Stuart Rossiter
14

Als Folge der Antwort von Kristian Holdhus (als korrekt markiert) können Sie stattdessen das compilerAttribut für die Aufgabe Ant javac verwenden . Die Einstellung compiler="modern"sollte sowohl rückwärts (bis zurück 1.3) als auch vorwärts kompatibel sein.

Dadurch wird vermieden, dass die benannte Java System-Eigenschaft festgelegt werden muss build.compiler. Nur wenn das compilerAttribut für die javacAufgabe nicht explizit festgelegt wird, verwendet Ant den Wert von build.compilerals Fallback.

Chuck Daniels
quelle
Ich habe die Antwort von Kristian Holdus mit Sicherheit positiv bewertet. Ich fand dies jedoch eine bessere Lösung für meine Situation. Indem wir die Aufrufer zwingen, einen -D-Parameter hinzuzufügen, erschweren wir das Versenden der build.xml an externe Benutzer. Wir müssen auch zusätzliche Gebrauchsanweisungen bereitstellen, die immer kleiner sind, je besser :)
Rakesh N
Es funktioniert und zeigt Notizen beim Bauen [javac] warning: C:\Program Files\Java\jre1.8.0_152\lib\rt.jar(java/net/ConnectException.class): major version 52 is newer than 51, the highest major version supported by this compiler. [javac] It is recommended that the compiler be upgraded.usw.
aswzen
7

Ich hatte das gleiche Problem. Ich hatte JAVA_HOME und JRE_HOME richtig eingestellt. Ich hatte auch Ant> 1.9.

Um dies zu beheben, gehe ich zu Eclipse to Window -> Preferences. Erweitern Sie Ant und wählen Sie Runtime. Standardmäßig sollte die Registerkarte Klassenpfad ausgewählt sein und auf der rechten Seite befindet sich eine Schaltfläche namens "Ant Home". Klicken Sie auf diese Schaltfläche und überprüfen Sie, ob sie auf Ihren Ant-Ordner verweist.

Mike Kuenzi
quelle
3
JAVA_HOME = C:\Program Files (x86)\Java\jdk1.5.0_16
JRE_HOME = C:\Program Files (x86)\Java\jre1.5.0_16

Ihr JAVA_HOME und JRE_HOME sind auf die Java 1.5-Installation eingestellt, daher werden 1.8 Binärdateien (wie javac) nicht gefunden. Stellen Sie sie auf die Java 1.8-Installation ein und es sollte Ihnen gut gehen.

Toni Toni Chopper
quelle
Aber ich möchte jdk1.8 nicht verwenden. Warum versucht Ant, den 1.8-Compiler mit diesen Einstellungen zu verwenden?
Kamilz
1
Führen Sie den Ant-Build mit "Ausführen als"> "Ant-Build ..." aus, öffnen Sie die Registerkarte "JRE" und wählen Sie die "Laufzeit-JRE" aus, mit der Sie das Skript ausführen möchten.
Toni Toni Chopper
Die Task "javac" kann Bytecode für ältere VMs generieren. Siehe das Attribut "target" im Dokument: ant.apache.org/manual/Tasks/javac.html Java 1.5 kann keinen Bytecode für spätere VMs generieren.
Mark O'Connor
2

Ich habe es mit Eclise versucht und den gleichen Fehler erhalten. Klasse nicht gefunden: javac1.8

Ich habe die ANT-Version auf meinem System überprüft

> Ameisenversion

Apache Ant (TM) Version 1.9.6 wurde am 29. Juni 2015 kompiliert

Als ich versuchte, die Datei build.xml über die Eingabeaufforderung auszuführen, funktionierte es. Dann habe ich überprüft, dass es sich bei der Eclipse um die ältere Version der ANT handelt.

Ich habe einfach den ANT HOME-Pfad in der Eclipse bearbeitet und es hat auch von hier aus funktioniert. :) :)

Unten sehen Sie das Bild, von dem aus der ANT-Pfad in der Eclipse bearbeitet werden muss.

  1. Klicken Sie mit der rechten Maustaste auf die Datei build.xml
  2. Rennen wie
  3. Externe Werkzeugkonfigurationen
  4. Wählen Sie die Registerkarte Klassenpfad

Ändern Sie nun den ANT Home-Pfad von hier aus.

Geben Sie hier die Bildbeschreibung ein

KulDeep
quelle
In was haben Sie den ANT Home-Pfad geändert?
Igor Ganapolsky
1
Hi @IgorGanapolsky Früher war der Ant-Versionspfad für Ant 1.8, den ich auf die neueste Ant-Version 1.9 aktualisiert habe, wie im obigen Bild gezeigt. Und es hat funktioniert. Hoffe ich habe deine Frage beantwortet.
KulDeep
1

Aktualisieren Sie Ant auf Version 1.9.x als Java 8, das nicht mit Ant-Versionen unter 1.9 kompatibel ist

Neha Priya
quelle
0

Ich habe alle anderen Lösungen ausprobiert, aber keine hat funktioniert. Endlich habe ich in Eclipse einen Ansatz gefunden, der für mich funktioniert:

  • Klicken Sie mit der rechten Maustaste auf den Namen der Ameisenaufgabe, z. B. "compileCustomSrc" im antFenster.
  • Wählen Run As | External Tool Configurations
  • JREWählen Separate JRE: Java SE7Sie dann auf der Registerkarte oder wie auch immer Ihr Java 7 heißt, drücken Sie Applyund dann Run.

Ihre Ameisenaufgabe wird ausgeführt und korrekt erstellt!

Brad Parks
quelle
0

Aktualisieren Sie Ant auf Version 1.9.x als Java 8 in Inkompatibilität mit Ant-Versionen unter 1.9 oder nach dem Befehl -Dbuild.compiler = javac1.7 (siehe unten):

ant release -Dbuild.compiler = javac1.7

linhadiretalipe
quelle
0

Manchmal hängt das Problem beim Erstellen des Krieges durch ANT auch mit der fehlenden Übereinstimmung der Java-Version in den Dateien build.properties zusammen, da build.XML versucht, die in der Eigenschaft build.compiler erwähnte Java-Version zu verwenden

Überprüfen Sie, ob die Eigenschaft build.compiler mit der beabsichtigten Java-Version übereinstimmt.

SoSufi
quelle
0

Sie können eine neuere Version von Eclipse herunterladen, die eine neuere Version von Ant im Plugins-Verzeichnis enthält. Kopieren Sie dann das Ant-Glas in das Plugin-Verzeichnis der älteren Eclipse. Eclipse zeigt automatisch auf die neuere Version von Ant. Dies funktionierte für ältere Kepler mit neuerem Mars2 für mich.

Techron
quelle
0

Ich hatte das gleiche Problem. Und ich konnte es in der build.xml lösen, indem ich eine Eigenschaft festlegte.

<property "build.compiler=javac1.7">
Pavan Dittakavi
quelle