Wie führen Sie das Glas aus 'lein jar" Befehl?
Dies ist ein follow-up für diese Frage.
Nach dem ausführen von 'lein jar' bekomme ich 'myproject-1.0.0-SNAPSHOT.jar', die nicht enthalten, die clojure-1.2.0-beta1.jar und clojure-contrib-1.2.0-beta1.jar.
Und läuft 'lein uberjar" gibt mir zwei jar-Dateien. Das erste (das endet mit -standalone.jar) ist das Glas enthält alles, und das zweite ist das gleiche wie das jar erzeugt, die mit 'lein jar'.
Dies ist die Frage, die jar mit der zweiten. Es gibt kein problem, läuft mit dem ersten Glas, wie ich schon in dem vorherigen post.
Wenn ich
java -cp PATH_TO_THE_CLOJURE_AND_CONTRIB.jar:$CLASSPATH -jar myproject-1.0.0-SNAPSHOT.jar'
Bekomme ich die folgende Fehlermeldung.
Verursacht durch: java.lang.ClassNotFoundException: clojure.lang.IFn bei java.net.URLClassLoader$1.run(URLClassLoader.java:202) bei java.Sicherheit.AccessController.doPrivileged(Native Method) bei java.net.URLClassLoader.findClass(URLClassLoader.java:190) bei java.lang.ClassLoader.loadClass(ClassLoader.java:307) bei der sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) bei java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Was falsch sein könnte, ich dachte, ich kann die 'myproject-1.0.0-SNAPSHOT.jar auf die gleiche Weise mit 'myproject-1.0.0-SNAPSHOT-standalone.jar" wenn ich auf die jar-Dateien mithilfe der -cp option.
Gibt es nichts mehr, was ich tun musste?
HINZUGEFÜGT
java -cp ALLTHE_JAR_PATH myproject.Kern
löst das problem.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie mit Leiningen 1.2, sind Sie wahrscheinlich geschlagen durch einen bug wobei die Abhängigkeiten gelöscht, die vor der Schaffung eines uberjar (offensichtlich besiegen den Punkt der uberjar). Bitte entweder ein downgrade auf 1.1 und warten, bis die neue Version (die sollte demnächst) oder verwenden Sie ein checkout von lein den KOPF (wie beschrieben im Abschnitt auf hacking Leiningen lein README-Datei).
Sobald Sie das tun, sollten Sie in der Lage zu produzieren eine standalone-jar mit
lein uberjar
und sagenjava -jar name-of-your-standalone.jar
Ihre app zu starten.Als alternative können Sie erstellen eine jar mit
lein jar
und etwas sagen wiejava -cp '$PROJECT_ROOT/lib/*:your-app.jar' your-app.main
(woyour-app.main
ist Ihre Anwendung main-Klasse; auch, ersetzen$PROJECT_ROOT
mit dem entsprechenden Pfad und geben Sie einen Pfad zuyour-app.jar
natürlich). Dielib/*
Sache funktioniert nur auf JDK 1.6; mit 1,5 müsste man jedes Glas einzeln. Beachten Sie, dass bei der Verwendung von-jar
,-cp
und$CLASSPATH
werden ignoriert; nur die classpath angegeben in der jar-manifest (falls vorhanden) berücksichtigt wird.-jar
,-cp
ignoriert (und so ist$CLASSPATH
). Du wirst-cp
und geben Sie die Haupt-Klasse von hand (wenn es heißtyour-app.main
sagenjava -cp ... your-app.main
, mit allen Argumenten, um Ihremain
- Methode (= die Clojure-Funktion-main
) am Ende). Ich sollte bemerkt haben, das Lesen der Frage... Bearbeiten es in der Antwort.clojure.jar
undclojure-contrib.jar
für Sie, dann ist es nicht funktioniert ohne problem. Einschließlich der Abhängigkeiten ist der springende Punkt, der uberjar! (Und es macht die Verwendung vonjava -jar
möglich.)-jar
sowieso. Vielen Dank für diesen Hinweis!