我有一个基于 Felix 的普通 OSGI 环境,我在其上部署了一个捆绑包,其中包含一个嵌入式 ActiveMQ 代理。我想在同一个 OSGI 环境中部署另一个包,它应该有一个嵌入式码头,ActiveMQ Web 控制台战争文件将部署在该码头上。我尝试通过生成嵌入式码头并将war文件部署为该捆绑包的一部分(bundleActivator Start Method),但它给了我以下异常 -
Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContextListener
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 org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:431)
at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:393)
我在包类路径中有 Servlet-API jar(导入包并在包部署时被解析)。我还注意到 activemq-web-console-5.10.0.war 文件的 lib 文件夹也包含 Servlet-API jar。
所以,我认为可能是因为 Servlet-API jar 的重复,它抛出了这个异常并从我的包类路径中删除了 Servlet-API jar(删除了导入,也通过取消部署导出该包的包来尝试)但是在这个如果我的包没有被部署并且我收到了接线异常(因为 Jetty 依赖项显然需要那个 jar)。
我不想解压并再次打包war文件并尝试。
请注意:此 war 文件已成功部署在 Karaf 上,但我无法使用我自己的 felix 启动器将其部署在基于普通 Felix 的 OSGI env 上。
请帮忙 !
编辑
包含嵌入式码头的捆绑包被部署,但是当我启动它时,当码头正在启动(部署战争文件)时,上面的异常被抛出
结束编辑