Как выполнить банку, сделанную из 'lein банка' команда?

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

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

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

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

Когда я работаю

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', если я указываю на использование файлов банки - опция CP.

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

ДОБАВЛЕННЫЙ

java -cp ALLTHE_JAR_PATH myproject.core

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

13
задан Community 23 May 2017 в 12:00
поделиться

1 ответ

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

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

В качестве альтернативы вы можете создать обычный 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 отдельно. Обратите внимание, что при использовании -jar, -cp и $CLASSPATH игнорируются; учитывается только classpath, указанный в манифесте jar (если он есть).

10
ответ дан 2 December 2019 в 01:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: