Это - продолжение для этого вопроса.
После выполнения '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
решает проблему.
Если вы используете 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 (если он есть).