gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:55:47 26 4
gpt4 key购买 nike

我是 OSGi 新手。我正在使用 eclipse PDE“Kepler Service Release 2”。

我想让 javax.servlet 包中的类可供我的测试客户端使用。但是当我只是为了测试而尝试创建 ServletException 对象时,我收到了 NoClassDefFoundError 。

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 \";version:List=\"1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8\""

我可以在系统 bundle (0) 中看到此导出包:javax.servlet; version="0.0.0"[导出]我的 bundle 中有这个导入包: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
导出包:....,javax.servlet,...
片段主机:system.bundle;扩展名:=framework

...

我错过了什么吗?

提前致谢。

最佳答案

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

javax.servlet:javax.servlet-api:3.1.0

关于java - 在 OSGi 中,尝试使用系统导出包中的类时获取 ClassNotFoundExceptions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32695196/

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