Pergunta

Este é um acompanhamento para essa questão.

Depois de executar 'Lein Jar', eu recebo 'MyProject-1.0.0-snapshot.jar', que não contém o clojure-1.2.0-beta1.jar e o clojure-contrrib-1.2.0-beta1.jar.

E executar 'Lein Uberjar' me dá dois arquivos JAR. O primeiro (que termina com -standalone.jar) é o frasco que contém tudo, e o segundo é o mesmo que o frasco gerado com 'lein jar'.

Esta é a questão do frasco com a segunda. Não há problema em correr com o primeiro frasco, como expliquei no anterior publicar.

Quando eu corro

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

, Estou tendo o erro a seguir.

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)

O que pode estar errado, pensei em usar o 'MyProject-1.0.0-snapshot.jar da mesma maneira com' myProject-1.0.0-snapshot-padronia.jar 'se eu apontar para os arquivos JAR usando a opção -cp.

Há algo mais que eu tive que fazer?

ADICIONADO

java -cp ALLTHE_JAR_PATH myproject.core

resolve o problema.

Foi útil?

Solução

Se você estiver usando o Leiningen 1.2, provavelmente está sendo atingido por um bug pelo qual as dependências serão excluídas antes da criação de um Uberjar (obviamente derrotando o ponto do Uberjar). Por favor, faça o downgrade para 1.1 e aguarde a nova versão (que deve chegar em breve) ou use uma finalização da cabeça da cabeça de Lein (conforme descrito na seção sobre Hacking Leiningen no Lein's ReadMe).

Depois de fazer isso, você poderá produzir uma jarra independente com lein uberjar e diz java -jar name-of-your-standalone.jar Para iniciar seu aplicativo.

Como alternativa, você pode criar um frasco comum com lein jar e dizer algo como java -cp '$PROJECT_ROOT/lib/*:your-app.jar' your-app.main (Onde your-app.main é a classe principal do seu aplicativo; Além disso, substitua $PROJECT_ROOT com o caminho apropriado e fornecer um caminho para your-app.jar, é claro). o lib/* A coisa só funcionará no JDK 1.6; Com 1.5, você teria que incluir cada jarra separadamente. Observe que ao usar -jar, -cp e $CLASSPATH são ignorados; Somente o caminho de classe especificado no manifesto do frasco (se houver) é levado em consideração.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top