我是OSGi的新手。我正在使用eclipse PDE'Kepler Service Release 2'。
我想让javax.servlet包中的类可用于我的测试客户端。但是,我正在获取NoClassDefFoundError,仅用于测试,试图创建一个ServletException对象。
java.lang.NoClassDefFoundError:javax / servlet / ServletException。
我尝试过这两种方式。两者都不起作用:
尝试1:使用系统包
我的eclipse OSGI框架中有这些启动参数:
-Dorg.osgi.framework.system.packages.extra =的javax.servlet
-Dorg.osgi.framework.system.capabilities =“osgi.ee; osgi.ee = \”JavaSE \ “;版本:列表= \” 1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8 \ “”
我可以在System Bundle(0)中看到这个Export-Package:javax.servlet; version="0.0.0"[exported]
我是我的包我有这个导入包:org.osgi.framework;version="[1.5,2)",javax.servlet
。
启动容器时,即使使用标记-Dorg.osgi.framework.bootdelegation=*
,也无法使其正常工作。
尝试2:使用ExtensionBundle
我的ExtensionBundle在其类路径中有jar javaee-api-6.0.jar并导出javax.servlet包。 但我仍然得到'java.lang.NoClassDefFoundError:javax / servlet / ServletException'。
我没有任何启动参数。
在扩展包的Manifest.mf中: ......
Bundle-ClassPath:。,javaee-api-6.0.jar
Export-Package:....,javax.servlet,...
Fragment-Host:system.bundle; extension:= framework
...
我错过了什么。
提前致谢。
答案 0 :(得分:1)
JRE不包含javax.servlet包。所以你不能简单地导出它。您可以在maven central中查看下面的包。它导出包。还要记住,servlet API不足以运行servlet。您还需要osgi HTTPService的实现。可能的实现包括:felix http service,org.eclipse.equinox.http.jetty,pax-web。因此,更好的解决方案可能是安装其中一个。
javax.servlet:javax.servlet-api:3.1.0