2

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

缺少要求:javax.servlet.annotation

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

javax.faces.webapp.FacesServlet 不能转换为 javax.servlet.Servlet

有了这个错误,我可以运行我的 JSF 页面,但它没有显示 JSF 标记。

4

1 回答 1

1

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

您面临的第二个问题是将 servlet 类添加到战争中,这是 OSGi 和 servlet 规范禁止这样做的。

因此,如果对您的场景没有任何进一步的了解,您可能会更好地使用 Apache Karaf 服务器(它使用 Pax Web),因为所有基础设施捆绑包都已经包含在内并且可以一起工作。

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

于 2015-04-10T10:34:42.230 回答