Java JNI Error bei Migration auf MPS 2020.1

Technische Problemstellung:

Sie versuchen, Ihre auf dem MPS-Framework basierende Applikation von MPS 2019.3 auf MPS 2020.1 zu migrieren, der Build-Vorgang funktioniert bestens, lediglich beim Start der generierten Applikation erhalten Sie ein Popup-Fenster bzgl. einer Java JNI-Exception?

Problemlösung:

Starten Sie die Applikation zunächst erst einmal direkt über die Kommandozeile. Nun sehen Sie den konkreten Stack-Trace der zurückgelieferten Exception:


Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: 
jetbrains/mps/Launcher has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

Hier ist zu erkennen, dass die Applikation mit einer veralteten Java JRE-Version gestartet wird (in diesem Falle Java 1.8). Der ursächliche Fehler ist somit innerhalb des Batch-Files zu suchen, welches durch die MPS-Build-Scripte erstellt wurden. Ein Vergleich mit MPS 2019.3 zeigt, dass sich der bisherige erwartete Pfad zur JRE geändert hat.


Der bisherige Ablageort "jre" oder "jre64" lautet mit MPS 2020.1 nun "jbr" bzw. "jbr-x86". Sollte dieses Verzeichnis nicht existieren, so wird die gemäß JAVA_HOME auf dem System gefundene JRE-Version verwendet. 


Sollte diese Version älter als Java 11 sein, so ist dieser UnsupportedClassVersionError die Folge. Eine einfache Umbenennung des "jre"-Verzeichnisses in "jbr" löst nach einem erneuten Build-Vorgang dieses Problem vollumfänglich.




Probleme bei der JAR-Integration in MPS