我正在使用Eclipse和插件m2eclipse来构建和管理我的项目。在POM中,我已经包含了servlet-api的条目:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
提供范围,不包括.war文件到.war包(它已由tomcat servlet容器提供)。 mvn install 编译正确,文件 包含在 WEB-INF \ lib 中,部署到tomcat是工作,程序正在工作,没关系。
但是,案例在Eclipse内部开始。从eclipse启动我的web应用程序后,我收到错误:
\ WEB-INF \ lib \ servlet-api-2.5.jar) - 罐子没装。请参阅Servlet规范2.3, 第9.7.2节。违规课程: 的javax / servlet的/ Servlet.class
我不知道为什么,因为 Maven Dependencies (包括javac-servlet-2.5.jar)包含在 Java EE模块依赖性中,并且应该从推入WEB-INF \ lib文件夹,同时从eclipse开始。另一方面,在eclipse中我提供了到我的apache tomcat目录的路径,在项目内部,有来自 Apache Tomcat v6.0 的库的自动引用,包括 servlet-api.jar 即可。
所以基本上,在从POM删除对servlet-api-2.5.jar的引用之后,该库从 Maven Dependencies 中消失了,从eclipse启动我的web应用程序时我没有异常。一切都很好......在日食中。
当然没有在POM中输入,这次 mvn install failes 具有相同的异常,我之前提供过。
有没有办法让它工作而不删除而不是插入引用,这取决于我想做什么:使用maven编译或使用Eclipse运行?
此致
答案 0 :(得分:5)
此
\ WEB-INF \ lib \ servlet-api-2.5.jar) - jar未加载。请参阅Servlet规范2.3,第9.7.2节。违规类:javax / servlet / Servlet.class
只是来自应用服务器的警告,它忽略了您包含的JAR之一并且不会加载它。可以安全地忽略它。
问题在于Eclipse的部分/插件在嵌入式应用服务器中加载您的项目 - 听起来它只是使用依赖项列表作为库路径捆绑的内容,并且没有Maven范围的概念
就我个人而言,我会忽略这样的事情 - 你的Maven构建工作正常,在Eclipse中运行应用程序除了这个可忽略的警告之外应该工作得很好 - 否则你将不得不按照一个工具的预期调整你的项目(Eclipse的Web应用程序插件)与另一个(Maven)。
(另外我总是发现在Eclipse中运行webapps作为“Web项目”是一个痛苦的屁股,并导致各种奇怪 - 不值得麻烦 - 如果你想快速加载你的Maven webapp项目在servlet容器中,只需使用mvn jetty:run
或mvn tomcat:run
。使用IDE进行战斗可能会浪费时间。)
答案 1 :(得分:0)
安装名为“ Maven Integration for WTP ”的插件,它可以完全解决这个问题。
存储库网址: http://download.jboss.org/jbosstools/updates/m2eclipse-wtp/