Du kannst in deinem Java 8 Projekt keine JAR Datei verwenden die in einer höheren Version kompiliert wurde

Was wie das elfte Gebot klingt ist mir tatsächlich passiert: Ich habe an meinem Java 8 Projekt gearbeitet und musste dann eine Model-Klasse von einem anderen Projekt verwenden. Doof nur: Das andere Projekt ist bereits in Java 11 programmiert (noch ohne Module zu verwenden).

Ich habe mir nichts dabei gedacht, sondern wie gewohnt die Maven Abhängigkeit im Pom.xml eingetragen und kurz darauf habe ich die Jar-Datei in meinem Projekt in IntelliJ gefunden.

Als ich die Klasse versucht habe, zu verwenden, war IntelliJ sogar noch höflich zu mir und hat mir gesagt „Ja gut, ich kenne diese Klasse, die liegt doch in diesem Jar-Dings, du kannst sie also einfach importieren„.

Als ich die Klasse aber tatsächlich importiert habe kam nur die Meldung „Cannot resolve symbol„.

Ich habe alles mögliche versucht: Den Cache in IntelliJ invalidiert+restartet, den Target Ordner gelöscht und nochmals Maven:clean-install gemacht, und so weiter, aber nichts hat geholfen. IntelliJ konnte die Klasse einfach nicht finden. Selbst im Classpath war die Klasse beziehungsweise das Jar vorhanden.

Ganz zufällig habe ich etwas entdeckt, als ich die Klasse dekompiliert betrachtet habe: IntelliJ hat mich darauf hingewiesen, dass die Klasse in Java 11 kompiliert wurde. Das habe ich zu Beginn nicht gewusst, obwohl ich in diesem Blogpost natürlich explizit über genau diese Situation schreibe.

Was auch mühsam war: Bei meiner Internetrecherche bin ich auf niemanden getroffen, der die gleiche Situation beschrieben hat. Sobald man irgendwas wie „Use class from java 11 in java 8 project“ bei Google sucht kommen alles nur Anleitungen, wie man von Java 8 auf Java 11 migriert.

Weder die Internetrecherche noch meine Arbeitskollegen konnten mir weiterhelfen. Was also tun? Natürlich! Frage auf Stackoverflow gepostet und prompt hatte ich 8 Minuten später ganze 3 Antworten, die es mir erklärten:

You cannot use a jar file compiled in higher version of java in a project developed in lower version of java

Da momentan viele Firmen noch Java 8 verwenden und gegebenfalls zum Teil bereits auf Java 11 gewechselt haben ist es sicherlich praktisch, wenn jeder Java-Entwickler diesen Satz zumindest mal gehört hat.

Werbeanzeigen

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s