(я знаю, что это связано с Как я могу встроить Clojure в приложение RCP , но этот поток устарел, и мои настройки несколько отличаются)
Я использую Eclipse 3.7.1 и уже несколько дней пытаюсь написать приложение Eclipse / RCP на Clojure (насколько это возможно). Я пытался создать исходную версию clojure.osgi и CCW , пробовал демонстрационный проект RCPClojure и несколько других вещей. Каждый из них не работал (в основном, казалось бы, «нефиксированные» ошибки сборки / пути к классам, отсутствие актуальных документов / ответов, конфликт версий и т. Д.)
Мои собственные шаги, чтобы принести мне как минимум 50% успеха:
Создание нового проекта плагина, оборачивающего файл jar Clojure 1.3.0, установка идентификатора плагина org.clojure.v1.3.0
Создание нового проекта плагина org.cljtest42
с использованием шаблона RCP Hello
- Добавление
org.clojure
зависимостей плагина
- Добавление характера проекта CCW (для включения компиляции AOT), этот шаг добавляет папку
/classes
- Отредактируйте
plugin.xml
, чтобы добавить папку /classes
в classpath среды выполнения, а также добавьте org.cljtest42
в экспортируемые пакеты.
Добавьте два простых файла Clojure в пакет / пространство имен org.cljtest42
:
TestClass.clj:
(ns org.cljtest42.TestClass
(:gen-class))
(defn -main [greet] (println greet))
compile.clj
(ns org.cljtest42.compile)
(dorun (map compile ['org.cljtest42.TestClass]))
Запустите компиляцию AOT, выбрав узел проекта и выберите «Выполнить»> «Приложение Clojure» (теперь папка /classes
должна быть заполнена скомпилированными классами Clojure).
Ссылочный TestClass из класса Activator
(например, в start () - также пытался в Perspective.createInitialLayout ())
Пока все хорошо. Однако, попытка запустить этот проект как приложение Eclipse всегда терпит неудачу с этим:
java.io.FileNotFoundException: Could not locate org/cljtest42/TestClass__init.class or org/cljtest42/TestClass.clj on classpath:
at clojure.lang.RT.load(RT.java:430)
at clojure.lang.RT.load(RT.java:398)
at clojure.core$load$fn__4610.invoke(core.clj:5386)
at clojure.core$load.doInvoke(core.clj:5385)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.lang.Var.invoke(Var.java:401)
at com.pspctclr.cljtest42.TestClass.<clinit>(Unknown Source)
Было бы замечательно, если бы кто-то более знающий мог поделиться некоторыми указаниями о том, как можно решить эту проблему. Возможно, это связано с тем, что скомпилированные классы AOT на самом деле не попадают в путь к классам (не уверен почему? работает?
Спасибо!