gpt4 book ai didi

eclipse-plugin - 如何在 RCP 应用程序中嵌入 Clojure

转载 作者:行者123 更新时间:2023-12-05 00:42:10 25 4
gpt4 key购买 nike

我目前正在使用 javascript 向 Eclipse RCP 应用程序添加脚本,但我更希望能够使用 Clojure。但是,我遇到了类路径的困难,因为虽然 Eclipse 可以找到 Clojure 类,但 Clojure 本身却不能。

插件激活器的启动方法:

public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this ;
Class.forName("clojure.lang.RT") ;
JSController.startup() ;
}

不会引发 的类未找到异常clojure.lang.RT , 但对于 clojure/core__init 这是在同一个地方。
java.io.FileNotFoundException: Could not locate clojure/core__init.class or clojure/core.clj on classpath:
at clojure.lang.RT.load(RT.java:402)
at clojure.lang.RT.load(RT.java:371)
at clojure.lang.RT.doInit(RT.java:406)
at clojure.lang.RT.<clinit>(RT.java:292)

RCP 应用程序基于 Eclipse 3.1 版

有谁知道如何解决这一问题?

最佳答案

这比我想象的要简单得多:我假设在激活包/插件时,线程的类加载器将是加载插件的类加载器。不是,它是应用程序类加载器。

所以解决方法很简单:

Runnable cljRunner = new Runnable(){
public void run(){
Thread thisThread = Thread.currentThread() ;
ClassLoader savedCL = thisThread.getContextClassLoader() ;
thisThread.setContextClassLoader(Activator.class.getClassLoader()) ;
try {
clojure.lang.Compiler.load(
new java.io.StringReader(
"(require 'clojure.main)\n" +
"(require 'swank.swank)\n" +
"(clojure.main/with-bindings\n" +
" (swank.swank/start-server \"nul\" :encoding \"utf-8\" :port 9999))"
)) ;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
thisThread.setContextClassLoader(savedCL) ;
}
} ;
cljThread = new Thread(cljRunner) ;
cljThread.start() ;

关于eclipse-plugin - 如何在 RCP 应用程序中嵌入 Clojure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2352242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com