我正在使用Eclipse + Maven + m2eclipse在Apache Tomcat中构建和测试Web应用程序。
我在Eclipse中配置了Tomcat服务器,并为我的Web应用程序配置了部署程序集,包括“Maven Dependencies”(Java Build Path Entries专业化)。
当我部署并启动服务器时,Tomcat / Catalina总是警告我:
INFO:validateJarFile(/projects/src/main/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/webapp/WEB-INF/lib/servlet-api-2.5。 jar) - 没有加载jar。请参阅Servlet规范2.3,第9.7.2节。违规类:javax / servlet / Servlet.class
这是因为m2eclipse将servlet-api-2.5视为我项目的依赖项,并将其视为“Maven依赖项”的一部分,并将其作为部署程序集的一部分进行复制,但Tomcat servlet容器有自己的副本这个并且不喜欢在课程路径上看到2个副本。
我已经在我的pom.xml中用我的项目标记了对servlet-api-2.5的依赖
<scope>
provided
</scope>
这会阻止独立的Maven将servlet-api-2.5打包到我的构建中,但是m2eclipse看不到它。
(这不是一个大问题,因为警告是无害的,我只在IDE内部测试时看到它,真正的客户不会看到它,但我仍然想知道如何修复它,因为我喜欢清洁,我喜欢知道事情是如何运作的。)
有没有一种正确的方法告诉m2eclipse不要部署这个文件,或者告诉Eclipse不要让m2eclipse对哪些依赖项是运行时依赖项有最终决定权?
我确实找到了https://issues.sonatype.org/browse/MNGECLIPSE-1193提及
“Maven Dependencies”容器反映了测试编译时间范围,因此它应该具有范围“提供”的依赖性
答案 0 :(得分:14)
从更新站点http://m2eclipse.sonatype.org/sites/m2e-extras为m2eclipse插件(“Maven Integration for WTP”)安装额外内容。安装后,更新项目配置。
答案 1 :(得分:5)
我刚遇到类似的问题,并且相信我已经触底了。
如果您转到Eclipse中的服务器配置设置并选择“不发布服务模块”,则不应再出现这种情况。
Maven / M2Eclipse正在构建WAR - servlet-api-2.5.jar不会出现在目标目录或WAR文件中。
但问题是,当您通过eclipse将应用程序部署到您的tomcat时,Eclipse不会将您的maven构建的WAR / target目录用作默认值,它只是为您的项目使用正常的Eclipse“导出”设置。因此,它会在您的“Java EE模块”(或“部署程序集列表”,如果您使用的是Helios)中看到Maven_Dependencies中所有jar的列表,但它不尊重范围,只需部署所有jar。
如果选择不发布选项的服务,那么Eclipst / Tomcat应该直接从目标目录运行应用程序,因此将尊重maven范围。
它不会影响你的实时部署(除非你通过eclipse部署!),因为maven正在做正确的事情,但它有时会导致本地问题,因为你可以导致冲突的servlet / jsp jar,这可能会导致classcastexceptions和一般的痛苦......
答案 2 :(得分:5)
通常,项目中存在依赖于servlet-apî.jar
的依赖项Maven的默认行为是我将尝试导入您的依赖项+导入的依赖项的依赖项。
如果要排除特定的“子依赖项”,可以为maven提供如下配置:
<dependency>
<groupId>com.hpsworldwide.mbtrs.switch</groupId>
<artifactId>YOUR_DEPENDENCY</artifactId>
<version>1.0</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
然后maven将导入YOUR_DEPENDENCY +所有YOUR_DEPENDENCY依赖项,但将从YOUR_DEPENDENCY的依赖项中排除servlet-api。
答案 3 :(得分:4)
如果您使用的是Indigo,可以通过点击“Window”找到WTP插件 - &gt; “偏好” - &gt; “Maven” - &gt; “发现” - &gt; “开放目录”。
答案 4 :(得分:1)
一个提示:安装“Maven Integration for WTP”并更新项目配置后,检查目录/ WEB-INF / lib并删除里面的所有JAR。现在,清理Tomcat工作目录并再次运行。