在OSGi中,在尝试使用系统导出包中的类时获取ClassNotFoundExceptions

时间:2015-09-21 12:25:42

标签: java eclipse-plugin osgi osgi-bundle

我是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

...

我错过了什么。

提前致谢。

1 个答案:

答案 0 :(得分:1)

JRE不包含javax.servlet包。所以你不能简单地导出它。您可以在maven central中查看下面的包。它导出包。还要记住,servlet API不足以运行servlet。您还需要osgi HTTPService的实现。可能的实现包括:felix http serviceorg.eclipse.equinox.http.jettypax-web。因此,更好的解决方案可能是安装其中一个。

javax.servlet:javax.servlet-api:3.1.0