Документация Clojure.org по компиляции и gen-классу

  1. Я читаю документацию на 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, Может кто-нибудь помочь?

  2. Может кто-нибудь представить, где узнать о 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, вы можете начать с Википедии

Другие вопросы по тегам