Java: onopgelost compilatieprobleem

Wat zijn de mogelijke oorzaken van een “java.lang.Error: Unresolved compilatieprobleem”?

Aanvullende informatie:

Ik heb dit gezien nadat ik een set bijgewerkte JAR-bestanden van een build bovenop de bestaande JAR’s had gekopieerd en de applicatie opnieuw had opgestart. De JAR’s zijn gebouwd met behulp van een Maven-buildproces.

Ik zou LinkageErrors of ClassNotFound-fouten verwachten als de interfaces zouden veranderen. De bovenstaande fout duidt op een probleem op een lager niveau.

Een schone herbouw en herimplementatie loste het probleem op. Kan deze fout duiden op een beschadigde JAR?


Antwoord 1, autoriteit 100%

(herschreven 28-07-2015)

Het standaardgedrag van Eclipse bij het compileren van code met fouten erin, is het genereren van bytecode die de uitzondering genereert die u ziet, waardoor het programma kan worden uitgevoerd. Dit is mogelijk omdat Eclipse zijn eigen ingebouwde compiler gebruikt, in plaats van javacvan de JDK die Apache Maven gebruikt, en die de compilatie volledig mislukt vanwege fouten. Als u Eclipse gebruikt op een Maven-project waar u ook mee werkt met de opdrachtregel mvn, kan dit gebeuren.

De remedie is om de fouten te herstellen en opnieuw te compileren, voordat het opnieuw wordt uitgevoerd.

De instelling is gemarkeerd met een rood vak in deze screendump:

Eclipse-voorkeuren onder OS X


Antwoord 2, autoriteit 22%

probeer het eclipsproject op te schonen


Antwoord 3, autoriteit 14%

je probeert maven gewoon op te schonen op commando

mvn clean

en daarna het volgende commando

mvn eclipse:clean eclipse:eclipse

en herbouw uw project….


Antwoord 4, autoriteit 12%

Uw gecompileerde klassen moeten mogelijk opnieuw worden gecompileerd vanuit de broncode met de nieuwe jars.

Probeer “mvn clean” uit te voeren en vervolgens opnieuw op te bouwen


Antwoord 5, autoriteit 3%

Het grootste deel is correct beantwoord door Thorbjørn Ravn Andersen.

Dit antwoord probeert licht te werpen op de resterende vraag: hoe kan het klassenbestand met fouten in de jar terechtkomen?

Elke build (mvn&javac of eclipse) signaleert op zijn specifieke manier wanneer het een compileerfout tegenkomt, en zal weigeren er een Jar-bestand van te maken (of u op zijn minst duidelijk te waarschuwen). De meest waarschijnlijke oorzaak voor het stilzwijgend krijgen van klassenbestanden met fouten in een jar is door gelijktijdige werking van Maven en Eclipse.

Als u Eclipse open heeft staan terwijl u een mvn-build uitvoert, moet u uitschakelenProject> Automatisch bouwentotdat mvn is voltooid.

BEWERKEN:
Laten we proberen het raadsel in drie delen te splitsen:

(1) Wat is de betekenis van “java.lang.Error: Unresolved compilatie”
probleem”

Dit is uitgelegd door Thorbjørn Ravn Andersen. Het lijdt geen twijfel dat Eclipse tijdens het compilereneen fout heeft gevonden.

(2) Hoe kan een door Eclipse gecompileerd klassenbestand in het aangemaakte jar-bestand terechtkomen?
door maven (ervan uitgaande dat maven nietis geconfigureerd om ecj for te gebruiken
compilatie)?

Dit kan gebeuren door maven aan te roepen zonder of onvolledige opschoning. Of een automatische Eclipse-build kan reageren op wijzigingen in het bestandssysteem (gedaan door maven) en een klasse opnieuw compileren, voordatmaven verder gaat met het verzamelen van klassebestanden in de jar (dit is wat ik bedoeld met “gelijktijdige bewerking” in mijn oorspronkelijke antwoord).

(3) Hoe komt het dat er een compileerfout is, maar mvn cleanslaagt?

Wederom verschillende mogelijkheden: (a) compilers zijn het er niet mee eens of de broncode legaal is, of (b) Eclipse compileert met kapotte instellingen zoals onvolledig classpath, verkeerde Java-compliance enz. Hoe dan ook een opeenvolging van vernieuwen en opschonen ingebouwde Eclipse zou het probleem aan het licht moeten brengen.


Antwoord 6

Ik kreeg deze fout toen ik een opstartconfiguratie gebruikte met een ongeldig klassenpad. In mijn geval had ik een project dat aanvankelijk Maven gebruikte en dus bevatte een startconfiguratie een Maven classpath-element. Ik had het project later gewijzigd om Gradle te gebruiken en het Maven-klassenpad verwijderd uit het klassenpad van het project, maar de startconfiguratie gebruikte het nog steeds. Ik kreeg deze foutmelding toen ik het probeerde uit te voeren. Het opschonen en opnieuw opbouwen van het project loste deze fout niet op. Bewerk in plaats daarvan de startconfiguratie, verwijder het project classpath-element en voeg het project vervolgens weer toe aan de gebruikersvermeldingen in het classpath.


Antwoord 7

Ik kreeg deze foutmelding meerdere keren en had moeite om te trainen. Ten slotte heb ik de runconfiguratie verwijderd en de standaarditems opnieuw toegevoegd. Het werkte prachtig.


Antwoord 8

  1. Probeer gewoon de naam van het packagein de eclipse op te nemen voor het geval je het bent vergeten
  2. Importeer alle pakkettenvoordat u het gebruikt, EX: import java.util.Scannervoordat u Scannerklassegebruikt.
  3. Deze verbeteringen kunnen werken en het geeft Java: Unresolved compilation problemniet meer.
  4. Controleer ook het compiler compliance levelen de geselecteerde jdk versionis hetzelfde

Antwoord 9

Zorg ervoor dat u niet-beschikbare bibliotheken (jar-bestanden) uit het buildpad hebt verwijderd

Other episodes