tox*_*oxi 5 eclipse osgi clojure classpath eclipse-rcp
(我知道这与我如何在CCP应用程序中嵌入Clojure相关,但该线程已经过时,我的设置有所不同)
我正在使用Eclipse 3.7.1,现在已经尝试在Clojure中编写Eclipse/RCP应用程序(尽可能多).我已经尝试构建clojure.osgi和CCW的源代码版本,尝试了RCPClojure演示项目和其他一些东西.他们每个人都没有工作(主要看似"不可修复"的构建/类路径错误,缺乏最新的文档/响应,版本冲突等...)
我自己的步骤为我带来至少50%的成功:
创建一个包含Clojure 1.3.0 jar文件的新插件项目,设置插件ID org.clojure.v1.3.0
org.cljtest42使用RCP Hello模板创建一个新的插件项目
org.clojure插件依赖项/classes文件夹plugin.xml以将/classes文件夹添加到运行时类路径,也添加org.cljtest42到导出的包.在org.cljtest42包/命名空间中添加两个简单的Clojure文件:
TestClass.clj:
(ns org.cljtest42.TestClass
(:gen-class))
(defn -main [greet] (println greet))
Run Code Online (Sandbox Code Playgroud)
compile.clj
(ns org.cljtest42.compile)
(dorun (map compile ['org.cljtest42.TestClass]))
Run Code Online (Sandbox Code Playgroud)通过选择项目节点触发AOT编译,然后选择Run> Clojure application(该/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)
Run Code Online (Sandbox Code Playgroud)
如果有更多知识渊博的人可以就如何克服这个问题分享一些指示,那将是非常出色的.可能是因为AOT编译的类实际上并没有在类路径中结束(不确定为什么?,/ class被明确添加),或者由于Equinox/OSGI的方式,单独的Clojure插件无法访问它们作品?
谢谢!
问题似乎是 Clojure 包看不到您的包的类,尽管您已经导出了它们。这是因为,在 OSGi 中(您可能知道),为了使包能够看到类,需要导入其包。
但是,如果包需要从已调用它的包中加载类,那么情况又如何呢?为了实现这一点,Eclipse 实现了伙伴策略,它是专门针对这种情况设计的:
Eclipse-BuddyPolicy: [dependent|registered]。Eclipse-BuddyPolicy: registered,则需要将清单标头添加到捆绑包中,该标头使用 Clojure:Eclipse-RegisterBuddy: <clojure-bundle-name>免责声明:我没有任何使用 Clojure 的经验,但我想尝试一下。
| 归档时间: |
|
| 查看次数: |
689 次 |
| 最近记录: |