Apache Karaf 正在部署 .War 文件

Apache Karaf Deploying .War File

我的目的是 运行 OSGI Framework 上的 JSF 应用程序。因此,我正在尝试将一个 WAR 文件部署到一个用于 OSGi Web 应用程序的 servlet 容器,称为 PAX-WEB。我有一个在 WildFly 8.0 应用程序服务器上工作的正确工作的 JSF 实现。我从此应用程序成功创建了 OSGi 化的 WAR 文件。当我尝试使用 Maven 将其部署到 PAX-WEB 时,出现以下错误:

missing requirement: javax.servlet.annotation

我的应用程序的 /lib 文件夹中有这些 JAR:jsf-api-2.1.7jsf-impl-2.1.7jsp-api-2.1jstl-1.2。当我将 javax.servlet-api-3.0.1.jar 添加到我的 WAR 文件并重新部署它时,这次出现以下错误:

javax.faces.webapp.FacesServlet cannot be cast to javax.servlet.Servlet

由于这个错误,我可以 运行 我的 JSF 页面,但它不显示 JSF 标签。

您在这里混淆了两个问题。 第一,您的框架设置缺少 servlet 类。所以在这种情况下,我建议使用 pax-web-jetty-bundle。它是一个超级包,还包含并导出 servlet 类。在这种情况下,请确保您的框架设置中没有可用的 servlet jar。顺便提一句。查看 Pax Web 本身的示例和集成测试已经有助于了解需要哪些库。

您面临的第二个问题是将 servlet 类 添加到 war 的问题,这是根据 OSGi 和 servlet 规范禁止的。

因此,在不进一步了解您的场景的情况下,您最好使用 Apache Karaf 服务器(它使用 Pax Web),因为那里已经包含所有基础架构包并且可以协同工作。

还有一件事,您会在 ops4j 邮件列表中获得更多更好的反馈。