Подтвердить что ты не робот

Как запустить банку из команды "lein jar"?

Это продолжение для этого вопроса.

После запуска "lein jar" я получаю "myproject-1.0.0-SNAPSHOT.jar", который не содержит clojure -1.2.0-beta1.jar и clojure -contrib-1.2. 0-beta1.jar.

И запуск "lein uberjar" дает мне два файла jar. Первая из них (которая заканчивается на -standalone.jar) представляет собой банку, содержащую все, а вторая - та же, что и jar, сгенерированная с помощью "lein jar".

Это вопрос о банке со вторым. Там нет проблем с первой банкой, как я объяснил в предыдущем сообщении .

Когда я запустил

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

я получаю следующую ошибку.

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)

Что может быть неправильно, я думал, что могу использовать myproject-1.0.0-SNAPSHOT.jar так же, как и с myproject-1.0.0-SNAPSHOT-standalone.jar, если я укажу на файлы jar, используя - cp.

Есть ли что-то еще, что я должен был сделать?

ADDED

java -cp ALLTHE_JAR_PATH myproject.core

решает проблему.

4b9b3361

Ответ 1

Если вы используете Leiningen 1.2, вы, вероятно, попадаете в ошибку, при которой зависимости будут удаляться до создания uberjar (очевидно, побеждая точку uberjar). Пожалуйста, либо понизитесь до 1.1, либо дождитесь новой версии (которая должна прибыть в ближайшее время), либо используйте чек HEIN (как описано в разделе о взломе Leiningen в lein README).

Как только вы это сделаете, вы сможете создать отдельную банку с lein uberjar и сказать java -jar name-of-your-standalone.jar, чтобы запустить ваше приложение.

В качестве альтернативы вы можете создать регулярную банку с lein jar и сказать что-то вроде java -cp '$PROJECT_ROOT/lib/*:your-app.jar' your-app.main (где your-app.main - основной класс вашего приложения, а также заменить $PROJECT_ROOT на соответствующий путь и указать путь к your-app.jar, конечно). lib/* вещь будет работать только на JDK 1.6; с 1,5 вам придется включать каждую банку отдельно. Обратите внимание, что при использовании -jar, -cp и $CLASSPATH игнорируются; учитывается только путь класса, указанный в манифесте jar (если таковой имеется).