Документация Clojure.org по компиляции и gen-классу
Я читаю документацию на clojure.org о компиляции, последняя часть примеров gen-class. Я делаю примеры, а затем при попытке запустить его как приложение Java с:
java -cp ./classes:clojure.jar clojure.examples.hello Fred
в терминале я получаю:Error: Could not find or load main class clojure.examples.hello
, Может кто-нибудь помочь?Может кто-нибудь представить, где узнать о gen-class и: gen-class, я не нахожу много документации в Интернете
1 ответ
Команда java -cp ./classes:clojure.jar tst.core
с вашей базы + система + пользователь + дэйв почти правильно. java.lang.NoClassDefFoundError: clojure/lang/IFn
ошибка в том, что JVM не может найти классы Clojure, так как нет clojure.jar
файл в base+system+user+dave
директории, поэтому вам нужно указать правильный путь к файлу clojure.jar.
Как вы используете lein
он загружает зависимости вашего проекта в ваш локальный репозиторий. Одной из зависимостей будет сама Clojure, поэтому, если вы работаете на iOS/Linux и ваш lein project.clj имеет зависимость с clojure 1.7.0, команда для запуска из каталога base+system+user+dave будет выглядеть так:
java -cp ./classes:~/.m2/repository/org/clojure/clojure/1.7.0/clojure-1.7.0.jar tst.core
Поскольку это становится довольно раздражающим, когда у вас есть более одной зависимости, я бы предложил использовать lein uberjar
это создаст файл в target
каталог с именем your-project-name-standalone.jar, в котором будут все необходимые классы, поэтому для запуска его из командной строки перейдите в целевой каталог и выполните что-то вроде:
java -cp tst-standalone.jar tst.core
Чтобы узнать больше о том, как classpath работает в JVM, вы можете начать с Википедии