【发布时间】:2011-12-22 12:34:24
【问题描述】:
(我知道这与 How can I embed Clojure in an RCP application 有关,但该线程很旧,我的设置有些不同)
我正在使用 Eclipse 3.7.1,并且几天来一直在尝试在 Clojure 中编写一个 Eclipse/RCP 应用程序(尽可能多地)。我尝试过构建clojure.osgi 和CCW 的源版本,尝试过RCPClojure 演示项目和其他一些东西。它们中的每一个都不起作用(主要是看似“无法修复”的构建/类路径错误、缺少最新的文档/响应、版本冲突等......)
我自己的步骤为我带来至少 50% 的成功:
新建一个插件项目,包装 Clojure 1.3.0 jar 文件,设置插件 ID
org.clojure.v1.3.0-
使用 RCP Hello 模板创建一个新的插件项目
org.cljtest42- 添加
org.clojure插件依赖 - 添加CCW项目性质(启用AOT编译),此步骤添加
/classes文件夹 - 编辑
plugin.xml将/classes文件夹添加到运行时类路径,同时将org.cljtest42添加到导出的包中。
- 添加
-
在
org.cljtest42包/命名空间中添加两个简单的 Clojure 文件:TestClass.clj:
(ns org.cljtest42.TestClass (:gen-class)) (defn -main [greet] (println greet))编译.clj
(ns org.cljtest42.compile) (dorun (map compile ['org.cljtest42.TestClass])) 通过选择项目节点并选择“运行”>“Clojure 应用程序”来触发 AOT 编译(
/classes文件夹现在应填充已编译的 clojure 类)。引用来自
Activator类的 TestClass(例如在 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 编译的类实际上并没有最终出现在类路径中(不知道为什么?, /classes 被显式添加),或者由于 Equinox/OSGI 的方式,单独的 Clojure 插件无法访问它们有效吗?
谢谢!
【问题讨论】:
标签: eclipse clojure classpath eclipse-rcp osgi