Pregunta

Este es un seguimiento de esta pregunta .

Después de ejecutar 'Lein tarro', me sale 'miproyecto-1.0.0-SNAPSHOT.jar', que no contiene el clojure-1.2.0-beta1.jar y clojure-contrib-1.2.0-beta1. tarro.

Y corriendo 'Lein uberjar' me da dos archivos jar. La primera de ellas (que termina con -standalone.jar) es el frasco contiene todo, y el segundo es el mismo que el frasco generado con 'tarro Lein'.

Esta es la pregunta del frasco con la segunda. No hay ningún problema corriendo con el frasco primero, como ya he explicado en el anterior después .

Cuando corro

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

, me sale el siguiente error.

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é podría estar mal, pensé que puedo utilizar el '-SNAPSHOT.jar miproyecto-1.0.0 de la misma manera con 'miproyecto-1.0.0-SNAPSHOT-standalone.jar' si señalo a los archivos JAR utilizando - cp opción.

¿Hay algo más que tenía que hacer?

AÑADIDO

java -cp ALLTHE_JAR_PATH myproject.core

resuelve el problema.

¿Fue útil?

Solución

Si está utilizando Leiningen 1.2, estás siendo probablemente golpeado por un error por el cual se eliminan las dependencias serían antes de la creación de un uberjar (obviamente derrotar el punto de uberjar). Por favor, sea rebaja a 1,1 y esperar a que la nueva versión (que debería llegar en breve) o haga un checkout de la cabeza de Lein (como se describe en la sección sobre la piratería en Leiningen README de Lein).

Una vez hecho esto, usted debe ser capaz de producir un frasco independiente con lein uberjar y decir java -jar name-of-your-standalone.jar para lanzar su aplicación.

Como alternativa, puede crear un frasco regular con lein jar y decir algo como java -cp '$PROJECT_ROOT/lib/*:your-app.jar' your-app.main (donde your-app.main es la clase principal de la aplicación, también, reemplazar $PROJECT_ROOT con la ruta adecuada y suministrar una ruta de acceso a your-app.jar, por supuesto). Lo lib/* sólo funcionará en JDK 1.6; con 1,5 tendría que incluir a cada frasco separado. Nota que cuando se utiliza -jar, -cp y $CLASSPATH son ignorados; solamente la ruta de clase especificada en el tarro de manifiesto (si los hay) se tiene en cuenta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top