我正在使用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) - 罐子没装.请参阅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>
Run Code Online (Sandbox Code Playgroud)
这确实阻止了独立的Maven将servlet-api-2.5打包到我的构建中,但m2eclipse并没有这样看.
(这不是一个大问题,因为警告是无害的,我只在IDE内部测试期间看到它,真正的客户不会看到它,但我仍然想知道如何解决它,因为我喜欢清洁和我喜欢知道事情是如何运作的.)
有没有一种正确的方法告诉m2eclipse不要部署这个文件,或告诉Eclipse不要让m2eclipse对哪些依赖项是运行时依赖项有最终决定权?
我找到https://issues.sonatype.org/browse/MNGECLIPSE-1193其中提到
"Maven Dependencies"容器反映了测试编译时间范围,因此它应该具有范围"提供"的依赖项
小智 14
从更新站点http://m2eclipse.sonatype.org/sites/m2e-extras为m2eclipse插件("Maven Integration for WTP")安装额外内容.安装后,更新项目配置.
我刚刚遇到了类似的问题,并且相信我已经触底了.
如果您转到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和一般的痛苦. ..
小智 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>
Run Code Online (Sandbox Code Playgroud)
然后maven将导入YOUR_DEPENDENCY +所有YOUR_DEPENDENCY依赖项,但将从YOUR_DEPENDENCY的依赖项中排除servlet-api.
归档时间: |
|
查看次数: |
15142 次 |
最近记录: |