Domanda

Si tratta di un follow-up per questa domanda .

Dopo l'esecuzione di 'Lein jar', ottengo 'mioprogetto-1.0.0-SNAPSHOT.jar', che non contiene il clojure-1.2.0-beta1.jar e clojure-contrib-1.2.0-beta1. vaso.

E in esecuzione 'Lein uberjar' mi dà due file jar. Il primo (che termina con -standalone.jar) è il vaso contiene tutto, e la seconda è la stessa del vaso generata con 'vaso Lein'.

Questa è la domanda del vaso con il secondo. Non c'è alcun problema in esecuzione con il primo vaso, come ho spiegato nel precedente posta .

Quando eseguo

java -cp PATH_TO_THE_CLOJURE_AND_CONTRIB.jar:$CLASSPATH -jar myproject-1.0.0-SNAPSHOT.jar'

, ottengo il seguente errore.

Caused by: java.lang.ClassNotFoundException: clojure.lang.IFn
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)

Che cosa potrebbe essere sbagliato, ho pensato che posso usare il 'mioprogetto-1.0.0-SNAPSHOT.jar allo stesso modo con 'mioprogetto-1.0.0-SNAPSHOT-standalone.jar' se indico i file jar utilizzando - cp opzione.

C'è qualcosa di più che dovevo fare?

AGGIUNTO

java -cp ALLTHE_JAR_PATH myproject.core

risolve il problema.

È stato utile?

Soluzione

Se stai usando Leiningen 1.2, si sono probabilmente essere stato colpito da un bug per cui dipendenze sarebbero vengono eliminati prima della creazione di un uberjar (ovviamente sconfiggendo il punto di uberjar). Si prega di entrambi i downgrade a 1.1 e attesa per la nuova release (che dovrebbe essere in arrivo a breve) o utilizzare un checkout di testa di Lein (come descritto nel paragrafo relativo hacker Leiningen in README del Lein).

Una volta fatto questo, si dovrebbe essere in grado di produrre un vaso autonomo con lein uberjar e dire java -jar name-of-your-standalone.jar per lanciare la vostra applicazione.

In alternativa, è possibile creare un vaso regolare con lein jar e dire qualcosa come java -cp '$PROJECT_ROOT/lib/*:your-app.jar' your-app.main (dove your-app.main è classe principale dell'applicazione, anche, sostituire $PROJECT_ROOT con il percorso appropriato e fornire un percorso per your-app.jar, naturalmente). La cosa lib/* funziona solo su JDK 1.6; con 1,5 dovreste includere ogni barattolo separatamente. Nota che quando si usa -jar, -cp e $CLASSPATH sono ignorati; solo il percorso classe specificato nel barattolo del manifesto (se presente) viene preso in considerazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top