Как запустить maj-упакованное приложение clojure из банки - PullRequest
4 голосов
/ 14 октября 2010

У меня есть следующее содержимое в файле src/main/clojure/za/co/pb/maven_test/test.clj:

(ns za.co.pb.maven-test.test
  (:gen-class))

(defn -main []
  (println "Hello world!"))

У меня также есть POM, имеющий необходимые зависимости от clojure-maven-plugin при выполнении компиляции.

Если я выполняю команду mvn package, я получаю файл target/maven-test-1.0-SNAPSHOT.jar, и если я просматриваю папку классов, эти файлы находятся в папке target/classes/za/co/pb/maven_test:

  • test.class
  • test.clj
  • test__init.class
  • test$loading__4410__auto__.class
  • test$_main.class

Это, насколько я знаю,

Однако, когда я запускаю эту команду:

java -cp target\app-1.0-SNAPSHOT.jar za.co.pb.maven_test.test

я получаю это:

Exception in thread "main" java.lang.NoClassDefFoundError: clojure/lang/IFn
Caused by: java.lang.ClassNotFoundException: clojure.lang.IFn
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: za.co.pb.maven_test.test. Program will exit.

Ответы [ 4 ]

6 голосов
/ 14 октября 2010

У вас нет банок clojure в пути к классам.Вы можете либо встроить их в соответствии с ответом Стюарта, либо, если вам не нравится встраивать все зависимости в один jar-файл, вы можете использовать плагин зависимостей и плагин jar, чтобы все заработало.

См .: http://groups.google.com/group/enclojure/msg/87159854fcb0e708 для краткого изложения (обратите внимание, что в сообщении есть опечатка, пакет должен называться "foo").

4 голосов
/ 14 октября 2010

Вам необходимо сгенерировать файл JAR, который включает все зависимости вашего проекта.Плагин Maven Assembly делает это за вас, используя встроенный дескриптор jar-with-dependencies.

2 голосов
/ 06 июня 2017

Если вы используете leiningen , после генерации баночки с lein uberjar не используйте java -jar target/your-name.jar, но используйте java -jar target/your-name-standalone.jar.

То же самое для boot.

0 голосов
/ 14 октября 2010

Доступны ли все зависимости?Я не знаком с классом clojure.lang.IFn.Это из внешней библиотеки?Если это так, пометили ли вы зависимость предоставленной областью действия?

...