2015-07-16 8 views
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 Hochschule Java 1.7.0_60.So zielen Sie eine bestimmte Version von Java, wenn Sie einen Uberjar mit Leiningen machen

Innerhalb meiner project.clj habe ich :javac-options ["-target 1.7"] hinzugefügt, um zu Java 1.7 zu kompilieren, jedoch gibt dies den gleichen Fehler zurück, als 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 wird, bin ich mir nicht sicher, bitte helfen!

+1

Wie sieht Ihr project.clj aus? Sind Sie auf irgendwelche Bibliotheken angewiesen, die möglicherweise mit Java 8 kompiliert wurden? –

+0

Das Problem war mit einer der verwendeten Bibliotheken. Vielen Dank! –

Antwort

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"].

3

Clojure kompiliert derzeit zu Java-Klassen, die abwärtskompatibel zu Java 1.6 sind, also 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 es Java 1.6 kompatible Klassen bauen lassen, und dann mein Leningen-Projekt abhängig von der Gabel und nicht das Hauptprojekt machen.

Verwandte Themen