Maven依赖的问题。
大家好,
当我不通过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
请告知。 感谢
答案 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容器提供了这些类。此范围仅在编译和测试类路径中可用,并且不可传递。