获取ClassNotFoundException:org.eclipse.jetty.server.server
我在XML文件中使用类“org.eclipse.jetty.server.server”使用各种参数初始化它(请注意,这是一个OSGi环境)。但是,使用类“org.eclipse.jetty.server.server”的捆绑包没有启动并引发以下异常:获取ClassNotFoundException:org.eclipse.jetty.server.server,jetty,osgi,jetty-8,Jetty,Osgi,Jetty 8,我在XML文件中使用类“org.eclipse.jetty.server.server”使用各种参数初始化它(请注意,这是一个OSGi环境)。但是,使用类“org.eclipse.jetty.server.server”的捆绑包没有启动并引发以下异常: java.lang.ClassNotFoundException: org.eclipse.jetty.server.Server at java.net.URLClassLoader$1.run(Unknown Source)
java.lang.ClassNotFoundException: org.eclipse.jetty.server.Server
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.eclipse.core.runtime.internal.adaptor.ContextFinder.loadClass(ContextFinder.java:129)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.eclipse.jetty.util.Loader.loadClass(Loader.java:92)
at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.nodeClass(XmlConfiguration.java:349)
at org.eclipse.jetty.xml.XmlConfiguration$JettyXmlConfiguration.configure(XmlConfiguration.java:327)
我已经确保jetty服务器包已经启动并运行,并且我已经确保在清单文件的“导入的包”部分提供了正确的版本。如果您想以这种方式使用Jetty,请提供帮助。
- Jetty是基于XML配置初始化的
- 它在OSGi环境中使用
- 在函数结束时,从XML文件读取配置
- 那是从
- 在这里,您将发现一个技巧,即在从XML配置服务器之前,线程上下文类加载器将被覆盖
ClassLoader contextCl = Thread.currentThread().getContextClassLoader(); try { Thread.currentThread().setContextClassLoader(JettyBootstrapActivator.class.getClassLoader()); ... Server server = ServerInstanceWrapper.configure(null, configURLs, properties); ... return server; } ... finally { Thread.currentThread().setContextClassLoader(contextCl); }
使用线程上下文类加载器不是一件好事,但有时在调用使用TCL的代码时,这是必要的。最好是Jetty的XMLConfiguration类接受ClassLoader作为参数。是的,我使用的是基于Jetty.xml的自定义解决方案。我尝试了jetty osgi引导使用的相同方法(将contextclassloader更改为指向activator的classloader),但没有成功。不确定我是否遗漏了什么。将contextclassloader更改为指向activator的classloader“:我猜您已更改为Activator的类加载器,即捆绑包的类加载器。该类加载器是否看到org.eclipse.jetty.server.server类?我的意思是,包是否导入org.eclipse.jetty.server包?如果您检查org.eclipse.jetty.util.Loader.loadClass(Loader.java:92)的源代码,您将看到使用了上下文类加载器。所以要么你在设置类加载器时出错,要么你传递的类加载器没有看到那个类。我终于让它工作了。非常感谢你的帮助。你太棒了:)