在jboss6上使用maven部署JSP / Servlet项目时出错

时间:2011-05-13 06:46:05

标签: jsp jsf maven-2 jboss6.x

Maven依赖的问题。

大家好,

这是参考我之前的帖子 Error with Jboss while deploying a jsp/servlet web app "com.sun.faces.config.ConfigureListener" Error

当我不通过maven构建并将项目导出为战争(我使用Eclipse for J2EE)并通过其管理控制台将其部署到Jboss6时运行正常,而如果我使用mvn clean install并通过maven构建并复制战争由maven构建到我的/ deploy目录(Jboss)我收到以下错误

2011-05-10 14:41:57,509 INFO [org.jboss.web.tomcat.service.deployers.TomcatDeployment](HDScanner)deploy,ctxPath = / UltimateSMS-1 2011-05-10 14:41:57,681 ERROR [org.apache.catalina.core.ContainerBase。[jboss.web]。[localhost]。[/ UltimateSMS-1]](HDScanner)配置com类的应用程序监听器时出错。 sun.faces.config.ConfigureListener:java.lang.ClassNotFoundException:com.sun.faces.config.ConfigureListener         at java.net.URLClassLoader $ 1.run(URLClassLoader.java:217)[:1.6.0_20]         at java.security.AccessController.doPrivileged(Native Method)[:1.6.0_20]         at java.net.URLClassLoader.findClass(URLClassLoader.java:205)[:1.6.0_20]

战争的部署失败了。

这是我朋友的一部分

    <dependency>
                    <groupId>javax.servlet</groupId>
                    <artifactId>servlet-api</artifactId>
                    <version>2.5</version>
                    <type>jar</type>
                    <scope>compile</scope>
            </dependency>
            <dependency>
                    <groupId>jboss</groupId>
                    <artifactId>jboss-j2ee</artifactId>
                    <version>4.0.2</version>
                    <type>jar</type>
                    <scope>compile</scope>
            </dependency>
    <dependency>
                    <groupId>javax</groupId>
                    <artifactId>javaee-web-api</artifactId>
                    <version>6.0</version>
            </dependency>

否我的web.xml中有一个配置了一个faces监听器,并且它没有任何对JSF的引用

P.S:我的项目是一个简单的JSP / Servlet J2EE项目,没有引用JSF 我使用JDK 1.6和Maven - &gt; Apache Maven 3.0.3
我已经缩小了错误,我认为问题出在我的pom.xml

请告知。 感谢

1 个答案:

答案 0 :(得分:4)

我遇到了同样的问题。您应该替换pom.xml

    <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
                <version>2.5</version>
                <type>jar</type>
                <scope>compile</scope>
    </dependency>

和:

    <dependency>
                <groupId>javax</groupId>
                <artifactId>javaee-web-api</artifactId>
                <version>6.0</version>
    </dependency>

by:

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>6.0</version>
        <scope>provided</scope>
    </dependency>

根据maven doc,您应该将Servlet API和相关Java EE API的依赖性设置为范围提供,因为Web容器提供了这些类。

提供 这很像compile,但表示您希望JDK或容器在运行时提供依赖性。例如,在为Java Enterprise Edition构建Web应用程序时,您可以将Servlet API和相关Java EE API的依赖关系设置为提供的范围,因为Web容器提供了这些类。此范围仅在编译和测试类路径中可用,并且不可传递。