Was sind die möglichen Ursachen für ein "java.lang.Error: Ungelöstes Kompilierungsproblem"?
Zusätzliche Information:
Ich habe dies gesehen, nachdem ich eine Reihe aktualisierter JAR-Dateien aus einem Build auf die vorhandenen JARs kopiert und die Anwendung neu gestartet habe. Die JARs werden mithilfe eines Maven-Erstellungsprozesses erstellt.
Ich würde erwarten, dass LinkageErrors- oder ClassNotFound-Fehler auftreten, wenn sich die Schnittstellen ändern. Der obige Fehler weist auf ein Problem niedrigerer Ebene hin.
Ein sauberer Umbau und eine erneute Bereitstellung haben das Problem behoben. Könnte dieser Fehler auf eine beschädigte JAR hinweisen?
mvn compile
dies keinen Fehler, das Ausführen des Programms jedoch.mvn clean compile
zeigt den Fehler während der Kompilierung (wie erwartet).Antworten:
(umgeschrieben am 28.07.2015)
Das Standardverhalten von Eclipse beim Kompilieren von Code mit Fehlern besteht darin, Bytecode zu generieren, der die angezeigte Ausnahme auslöst, sodass das Programm ausgeführt werden kann. Dies ist möglich, da Eclipse anstelle des
javac
von Apache Maven verwendeten JDK einen eigenen integrierten Compiler verwendet und die Kompilierung aufgrund von Fehlern vollständig fehlschlägt. Wenn Sie Eclipse in einem Maven-Projekt verwenden, mit dem Sie auch über denmvn
Befehlszeilenbefehl arbeiten, kann dies passieren.Die Lösung besteht darin, die Fehler zu beheben und neu zu kompilieren, bevor Sie sie erneut ausführen.
Die Einstellung ist in diesem Screendump mit einem roten Kästchen markiert:
quelle
Versuchen Sie, das Eclipse-Projekt zu bereinigen
quelle
Sie versuchen nur, Maven auf Befehl zu reinigen
und danach folgenden Befehl
und baue dein Projekt neu auf ....
quelle
Ihre kompilierten Klassen müssen möglicherweise mit den neuen Jars aus der Quelle neu kompiliert werden.
Versuchen Sie, "mvn clean" auszuführen und dann neu zu erstellen
quelle
Der größte Teil wird von Thorbjørn Ravn Andersen richtig beantwortet.
Diese Antwort versucht, die verbleibende Frage zu beleuchten: Wie könnte die fehlerhafte Klassendatei im Glas landen?
Jeder Build (mvn & javac oder eclipse) signalisiert auf seine spezifische Weise, wenn ein Kompilierungsfehler auftritt, und lehnt es ab, eine Jar-Datei daraus zu erstellen (oder Sie zumindest prominent zu benachrichtigen). Die wahrscheinlichste Ursache für das unbeaufsichtigte Abrufen von Klassendateien mit Fehlern in einem JAR ist die gleichzeitige Ausführung von Maven und Eclipse.
Wenn Sie Eclipse geöffnet haben, während Sie einen MVN-Build ausführen, sollten Sie Projekt > Automatisch erstellen deaktivieren, bis MVN abgeschlossen ist.
EDIT : Lassen Sie uns versuchen, das Rätsel in drei Teile zu teilen:
Dies wurde von Thorbjørn Ravn Andersen erklärt. Es besteht kein Zweifel, dass Eclipse beim Kompilieren einen Fehler gefunden hat .
Dies kann entweder durch Aufrufen von maven ohne oder mit unvollständiger Reinigung geschehen. Oder ein automatischer Eclipse-Build könnte auf Änderungen im Dateisystem (von maven durchgeführt) reagieren und eine Klasse neu kompilieren, bevor maven Klassendateien in der JAR sammelt ( dies habe ich in meiner ursprünglichen Antwort mit "gleichzeitiger Vorgang" gemeint ).
Wieder mehrere Möglichkeiten: (a) Compiler sind sich nicht einig, ob der Quellcode legal ist oder nicht, oder (b) Eclipse kompiliert mit fehlerhaften Einstellungen wie unvollständigem Klassenpfad, falscher Java-Konformität usw. So oder so eine Sequenz von Aktualisierung und Bereinigung in Eclipse sollte das Problem auftauchen.
quelle
Ich hatte diesen Fehler, als ich eine Startkonfiguration mit einem ungültigen Klassenpfad verwendete. In meinem Fall hatte ich ein Projekt, das ursprünglich Maven verwendete, und daher enthielt eine Startkonfiguration ein Maven-Klassenpfadelement. Ich hatte das Projekt später geändert, um Gradle zu verwenden, und den Maven-Klassenpfad aus dem Klassenpfad des Projekts entfernt, aber die Startkonfiguration verwendete ihn weiterhin. Ich habe diesen Fehler beim Ausführen erhalten. Durch Bereinigen und erneutes Erstellen des Projekts wurde dieser Fehler nicht behoben. Bearbeiten Sie stattdessen die Startkonfiguration, entfernen Sie das Projektklassenpfadelement und fügen Sie das Projekt wieder zu den Benutzereinträgen im Klassenpfad hinzu.
quelle
Ich habe diesen Fehler mehrmals erhalten und mich bemüht, ihn zu lösen. Schließlich entfernte ich die Ausführungskonfiguration und fügte die Standardeinträge wieder hinzu. Es hat wunderbar funktioniert.
quelle
Stellen Sie sicher, dass Sie nicht verfügbare Bibliotheken (JAR-Dateien) aus dem Erstellungspfad entfernt haben
quelle