Frage

Dies ist ein Follow-up diese Frage .

Nach dem Ausführen von 'lein jar', I get 'myproject-1.0.0-SNAPSHOT.jar', die enthält nicht den Clojure-1.2.0-beta1.jar und Clojure-contrib-1.2.0-beta 1. Krug.

Und läuft 'lein uberjar' gibt mir zwei JAR-Dateien. Die erste (die Enden mit -standalone.jar) ist das Glas enthält alles, und das zweite ist das gleiche wie das Glas mit ‚Lein jar‘ erzeugt.

Dies ist die Frage nach der Dose mit dem zweiten. Es gibt kein Problem mit dem ersten Glas läuft, wie ich im vorigen post .

Wenn ich ausführen

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

, ich folgende Fehlermeldung erhalten.

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)

Was könnte falsch sein, dachte ich, dass ich die ‚myproject-1.0.0-SNAPSHOT.jar die gleiche Art und Weise mit‚myproject-1.0.0-SNAPSHOT-standalone.jar‘verwenden kann, wenn ich auf die JAR-Dateien verweisen mit - cp Option.

Gibt es etwas, dass ich tun?

ADDED

java -cp ALLTHE_JAR_PATH myproject.core

löst das Problem.

War es hilfreich?

Lösung

Wenn Sie mit Leiningen 1.2, sind Sie wahrscheinlich Hit durch einen Fehler ist, wodurch Abhängigkeiten vor der Schaffung eines uberjar gelöscht werden würde (natürlich dem Sieg über den Punkt der uberjar). Bitte entweder Herabstufung auf 1,1 und Warten auf die neue Version (die in Kürze eintreffen soll) oder eine Kasse von lein HEAD verwenden (wie auf Hacking Leiningen in lein README im Abschnitt beschrieben).

Wenn Sie das tun, sollten Sie in der Lage sein, ein Standalone-Glas mit lein uberjar zu produzieren und sagen java -jar name-of-your-standalone.jar Ihre App zu starten.

Als Alternative können Sie eine regelmäßige Glas mit lein jar schaffen und etwas sagen wie java -cp '$PROJECT_ROOT/lib/*:your-app.jar' your-app.main (wo your-app.main Ihre Anwendung ist Hauptklasse, auch ersetzen $PROJECT_ROOT mit dem entsprechenden Pfad und liefern einen Pfad zu your-app.jar, natürlich). Die lib/* Sache funktioniert nur auf JDK 1.6; mit 1,5 würden Sie jedes Glas einzeln schließen müssen. Beachten Sie, dass, wenn -jar Verwendung -cp und $CLASSPATH ignoriert werden; nur der angegebene Classpath in der der jar-Manifest (falls vorhanden) berücksichtigt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top