Question

Ceci est un suivi de cette question.

Après avoir exécuté 'pot de lein', je reçois 'myproject-SNAPSHOT.jar-1.0.0', qui ne contient pas le clojure-1.2.0-beta1.jar et Clojure-contrib-1.2.0-beta1. pot.

Et en cours d'exécution 'lein uberjar' me donne deux fichiers jar. La première (qui se termine par -standalone.jar) est le pot contient tout, et le deuxième est le même que le pot généré par 'lein pot.

Telle est la question du pot avec le second. Il n'y a aucun problème en cours d'exécution avec le premier pot, comme je l'ai expliqué dans le précédent après .

Quand je lance

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

, je reçois l'erreur suivante.

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)

Qu'est-ce qui pourrait être mal, je pensais que je peux utiliser le « myproject-SNAPSHOT.jar-1.0.0 de la même manière avec 'myproject-1.0.0-SNAPSHOT-standalone.jar si je signale aux fichiers JAR à l'aide - option cp.

Y at-il quelque chose de plus que je devais faire?

AJOUTÉE

java -cp ALLTHE_JAR_PATH myproject.core

permet de résoudre le problème.

Était-ce utile?

La solution

Si vous utilisez Leiningen 1.2, vous êtes probablement être touché par un bug dans lequel les dépendances obtiendraient supprimées avant la création d'un uberjar (battant évidemment le point de uberjar). S'il vous plaît revenir à la version 1.1 et attendre la nouvelle version (qui devrait arriver sous peu) ou utiliser une caisse de tête de lein (comme décrit dans la section sur le piratage Leiningen dans le README de lein).

Une fois que vous faites cela, vous devriez être en mesure de produire un pot autonome avec lein uberjar et dire java -jar name-of-your-standalone.jar pour lancer votre application.

Comme alternative, vous pouvez créer un pot régulier avec lein jar et dire quelque chose comme java -cp '$PROJECT_ROOT/lib/*:your-app.jar' your-app.main (où your-app.main est votre classe principale de l'application, aussi, remplacer $PROJECT_ROOT par le chemin approprié et fournir un chemin à your-app.jar, bien sûr). La chose lib/* ne fonctionne que sur JDK 1.6; avec 1,5 vous auriez à inclure chaque pot séparément. Notez que sont ignorés lors de l'utilisation -jar, -cp et $CLASSPATH; seul le classpath spécifié dans le manifeste du pot (le cas échéant) est pris en compte.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top