2015-07-16 13 views
8

Ho creato un jar autonomo usando Lein uberjar. Funziona perfettamente sul mio portatile che esegue java 1.8. Tuttavia i computer del mio college eseguono java 1.7.0_60.Come scegliere come target una versione specifica di java quando si effettua un uberjar usando Leiningen

All'interno del mio project.clj ho aggiunto :javac-options ["-target 1.7"] per compilare a java 1.7, tuttavia questo restituisce lo stesso errore di quando quel jar è compilato per java 1.8. L'errore è: Unsupported major.minor version 52.

Forse l'aggiunta di :javac-options ["-target 1.7"] al mio project.clj non ha alcuna influenza sulla versione che è stata compilata, non sono sicuro, per favore aiutatemi!

+1

Che aspetto ha il tuo project.clj? Dipende da tutte le librerie che potrebbero essere state compilate con Java 8? –

+0

Il problema era con una delle librerie usate. Grazie! –

risposta

0

Sembra che si stia utilizzando :javac-options errato. Prova ad usare questa opzione come menzionato nel documento Lein: :javac-options ["-target" "1.6" "-source" "1.6" "-Xlint:-options"].

3

Clojure attualmente compila in classi Java che sono retrocompatibili con Java 1.6, quindi non sono le opzioni di Leiningen javac a costituire il problema. Ho incontrato lo stesso problema su uno dei miei progetti. Il problema è che una delle librerie che stai usando è compilata per una versione di Java troppo nuova. Quando costruisci un überjar, Leiningen copia semplicemente le classi dai tuoi jar di dipendenza in esso, in modo da ottenere qualsiasi versione del file di classe che hanno.

Per risolvere questo problema nel mio caso, ho dovuto eseguire il fork del progetto di dipendenza su Github e farlo costruire classi compatibili con Java 1.6, e quindi fare in modo che il mio progetto Leningen dipendesse dal fork piuttosto che dal progetto principale.

Problemi correlati