关于maven:java.lang.ClassNotFoundException:javax.faces.webapp.FacesServlet,tomcat没有看到javaee-api-7.0-b83.jar

java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet, tomcat doesn't see javaee-api-7.0-b83.jar

我正在尝试从Java EE教程中运行示例guessnumber-jsf。 它在这里:https://svn.java.net/svn/javaeetutorial~svn

pom.xml中没有依赖项。 因此输出文件没有.jar文件。 当我尝试将javaee-api-7.0-b83.jar放入tomcat / lib或WEB-INF / lib / javaee-api-7.0-b83.jar时,没有任何变化。

当我尝试打开

本地主机:8080 / guessnumber-jsf / faces / greeting.xhtml

我得到ClassNotFoundException。 在哪里可以获取面部教程所需的罐子列表? 如何连接它们?


你不能把在Tomcat的Java EE的罐子,并期望它神奇地变身成为Java EE服务器。

该特定的jar仅包含要链接的API(例如,C / C ++术语中的"标头")。它不包含任何实现。

最简单的方法是放入Tomcat,然后下载TomEE。 (可选)下载GlassFish。

这些都已经包含了您需要的所有功能,并且无需在WEB-INF / lib中放入任何内容。 (如果使用Maven,则将Java EE 6 GAV作为pom中提供的范围的依赖项)。


如果您使用的是Maven项目,则可以通过添加以下依赖项来解决此错误:

1
2
3
4
5
<dependency>
    <groupId>org.glassfish</groupId>
    javax.faces</artifactId>
    <version>2.2.7</version>
</dependency>

除了Mike Braun的答案之外,用于Web配置文件的Java EE 6 GAV还包括:

1
2
3
4
5
6
<dependency>
    <groupId>javax</groupId>
    javaee-web-api</artifactId>
    <version>6</version>
    <scope>provided</scope>
</dependency>

特别注意范围:"提供"。这意味着您的Maven项目将对此进行链接,但是它希望您的运行时具有实现。对于TomEE,GlassFish的,JBoss AS中7.x的,这等事实确实如此。


在您的类路径(.classpath)中,确保您输入如下内容

1