Создание исполняемого файла jar из проекта Clojure?

У меня есть проект clojure, в котором используется гладкий игровой движок 2d, который я пытаюсь запустить как исполняемый файл jar. Я создал проект как в Netbeans, так и в Eclipse, и мне не удалось экспортировать их в исполняемый формат. Он продолжает выдавать ошибку, не могу найти основной класс, а затем дает мой основной класс. Я попытался отредактировать файл манифеста, изменив имя в надежде, что он его найдет, но пока не повезло.

Он работает в среде разработки, но не за ее пределами.


person toofarsideways    schedule 14.10.2009    source источник


Ответы (2)


Прошло некоторое время с тех пор, как я разместил этот вопрос, и я подумал, что буду придерживаться того, что нашел, поскольку для всех, кому нужен ответ на этот вопрос.

Теперь я использую Leiningen для управления своими проектами, хотя я начал экспериментировать с cljr, который является дополнением к ответу и диспетчеру пакетов. Любой из них значительно упрощает создание исполняемого файла jar.

Взяв в качестве примера Leiningen, настройте его, используя инструкции на сайте, а затем позвоните lein new в своем рабочем пространстве. Это создаст папку для ваших проектов, а также подпапки для вашего источника и проверит файл readme и файл project.clj.

Отредактируйте файл project.clj, указав зависимости, которые вы будете использовать. Dev-dependencies - это зависимости, которые вам нужны исключительно для разработки, такие как swank-clojure, показанные в примере ниже.

(defproject myproject "0.0.1-SNAPSHOT"
  :description "My Personal Project."
  :url "http://example.com/my-project"
  :dependencies [[org.clojure/clojure "1.1.0"]
                 [org.clojure/clojure-contrib "1.1.0"]
                 [**other dependencies**]]
  :dev-dependencies [[swank-clojure "1.2.1"]]
  :main [org.myproject.core])

Я считаю swank-clojure полезным, так как затем вы можете набрать lein swank, чтобы запустить экземпляр swank, к которому вы можете подключиться через emacs.

: main определяет, какое пространство имен содержит функцию -main.

Вызов lein uberjar создаст автономный jar, который затем будет запущен.

Надеюсь, это поможет всем, у кого была моя проблема!

person toofarsideways    schedule 14.08.2010
comment
Error: Could not find or load main class [prueba.core]. Я включил :main и соответствующее ему значение, и у меня есть -main функция, которая является общедоступной в этом пространстве имен. Есть идеи, что может пойти не так? - person m0skit0; 15.12.2014
comment
Привет @ m0skit0, я давно не писал это. Правильно ли вы структурировали свои каталоги? Под этим я подразумеваю, находится ли ваш project.clj в папке, содержащей src, содержащую prueba, содержащую core.clj? Вы использовали lein new <PROJECT NAME>, а затем отредактировали созданный core.clj файл? Если нет, не могли бы вы как можно яснее объяснить, что вы сделали? - person toofarsideways; 18.12.2014
comment
Структура проекта правильная, потому что она создана Лейнингеном. Наконец-то я заставил его работать, используя следующий синтаксис :main root.scriptlauncher :aot [root.scriptlauncher] для defproject. - person m0skit0; 18.12.2014

Мне пришлось добавить clojure.jar и clojure-contrib.jar в качестве «зависимости» к проекту, чтобы включить его в jar. как только я получил это, я смог запустить получившуюся банку. Имейте в виду, что Netbeans имеет собственный clojure.jar, который используется для запуска самого плагина, и это не обязательно должен быть тот же файл clojure.jar, который использует ваша программа. В Netbeans есть меню для добавления библиотек. Вам нужно будет добавить clojure [-contrib] .jar в библиотеки сборки и запуска.

person Arthur Ulfeldt    schedule 14.10.2009
comment
Я пробовал добавить это как библиотеку времени компиляции и времени выполнения в проект, но пока безуспешно. - person toofarsideways; 16.10.2009