Wie man eine bestimmte Version von Java anvisiert, wenn man einen Uberjar mit Leiningen erstellt

8

Ich erstelle ein Standalone-Glas mit Lein Uberjar. Das funktioniert ganz gut auf meinem Laptop, auf dem Java 1.8 läuft. Jedoch laufen die Computer an meiner Universität Java 1.7.0_60.

Innerhalb meiner project.clj habe ich :javac-options ["-target 1.7"] hinzugefügt, um zu java 1.7 zu kompilieren, aber das gibt den gleichen Fehler zurück wie wenn dieses jar für java 1.8 kompiliert wird. Der Fehler ist: Unsupported major.minor version 52 .

Vielleicht hat der Zusatz von :javac-options ["-target 1.7"] zu meinem project.clj keinen Einfluss auf die Version, die kompiliert wurde, ich bin nicht sicher, bitte helfe!

    
Will Barnsley 16.07.2015, 11:03
quelle

2 Antworten

3

Clojure kompiliert derzeit zu Java-Klassen, die abwärtskompatibel zu Java 1.6 sind. Daher sind es nicht die Leiningen javac -Optionen, die das Problem darstellen. Bei einem meiner Projekte stieß ich auf dasselbe Problem. Das Problem ist, dass eine der Bibliotheken, die Sie verwenden, für eine neue Java-Version kompiliert wird. Wenn du ein Überjar erstellst, kopiert Leiningen einfach die Klassen aus deinen Abhängigkeitsgläsern in sie, so dass du die Klassenversionen erhältst, die sie haben.

Um dieses Problem in meinem Fall zu lösen, musste ich das Dependency-Projekt auf Github forkieren und Java-kompatible Klassen erstellen und dann mein Leningen-Projekt von der Verzweigung und nicht vom Hauptprojekt abhängig machen.

    
James Elliott 13.05.2016 12:58
quelle
0

Es sieht so aus, als ob Sie :javac-options falsch verwenden. Versuchen Sie, diese Option zu verwenden, wie in Lein-Dokument erwähnt: :javac-options ["-target" "1.6" "-source" "1.6" "-Xlint:-options"] .

    
Mikhail Aksenov 17.07.2015 05:55
quelle

Tags und Links