Maven依赖项在WEB-INF / lib中不可见


67

我的项目基于Maven时遇到了这个奇怪的问题。我在Eclipse中创建了一个新的Maven项目,并启用了动态Web构面。但是现在在运行时抛出该异常ClassNotFoundException是因为Maven依赖项未复制到WEB-INF/lib目录中。我什至尝试在POM中添加“副本依赖项”部分,但没有帮助。

这里的某个人似乎已经以正确的方式解决了这个问题,但是我想他忘了提及解决方案了::(


1
尝试使用最新的m2eclipse插件。我认为它有两个部分,它帮助我获得了Eclipse类路径上的Maven依赖关系。
xecaps12 2011年

为了使Maven与wtp兼容,我必须从此处安装内核和其他组件:m2eclipse.sonatype.org/installing-m2eclipse.html
xecaps12 2011年

@xecaps谢谢,但是我已经做到了
Suraj Chandran

Answers:


171

这与eclipse和m2eclipse无关,并且可以选择更好地支持-m2e-wtp。另外,您不需要复制依赖性。以下是一些可能的原因:

  • 您应该调用mvn package(或右键单击> maven> package)并获取war文件- <packaging>(在pom中)必须为war
  • 您的依赖项应具有默认范围(如果存在,则为默认范围),provided否则test将不包含在归档文件中)
  • 如果要在Eclipse中的服务器上将项目作为动态Web项目运行,则应打开项目属性(右键单击>属性),然后选择“部署程序集”。在此处单击“添加”,选择“构建路径条目”,然后选择“行依赖”。这将指示WTP将Maven依赖项发送到服务器目录。

2
我同意其他人对此的看法。第三种选择正是对我有用的方法,除了这篇文章之外,没有其他建议。这在Indigo和最近发布的Eclipse Juno版本中都适用。
Kettch12年

1
该解决方案忽略了pom.xml的“提供”范围,因此,在我而言,我无法将整个Maven依赖项添加到Deployment Assembly中。您是否有任何变通办法来禁用Maven依赖库中的某些jar?
denu 2012年

1
使用第三个选项后,它可以工作,但是如果我使用Maven-> Update Project,它将还原并从Deployment Assembly中删除该条目。有什么办法解决这个问题?
Vedran

3
不需要第三个选项,因为m2e-wtp应该自动执行此操作。我注意到,每当WEB-INF / lib中缺少库时,手动构建(Maven构建...目标程序包)都会生成带有lib的jar,但是通过m2e-wtp部署到AS的战争将不包含它们。清理,关闭/打开项目有时会使库恢复正常。
Arjan Tijms 2013年

2
最后,我注意到,当库被正确部署的.classpath包含<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER条目。一旦库再次消失,该特定属性也消失。在本地文件历史记录中甚至可以看到该属性的出现和消失。
Arjan Tijms 2013年

12

首先安装Maven Integration for Eclipse WTP(帮助-> Eclipse Marketplace)

然后在您的Web项目的pom.xml中添加:

    <packaging>war</packaging>

之后,右键单击项目Maven-> Update Project,该项目将自动为您在Deployment Assembly中添加Maven依赖关系。


1
+1也对我有用。没有它,Maven会将依赖项打包为jar,而您不希望那样,您希望将所有依赖项打包在war类型文件中。这有多方面的影响,更多maven.apache.org/pom.html
bogdan.rusu

Maven->更新项目也对我有用。在Eclipse Luna版本中似乎
很有


4

检查项目的Deployment Assembly属性。我已经看到一些mvn eclipse:eclipse生成的Eclipse项目有时会将资产部署到错误的位置。据我所知,新的Deployment Assembly在Eclipse 3.6(Helios)的早期版本中存在一些问题。




0

如果您调查部署并发现WEB-Inf / lib中没有Maven依赖项,那么如选择的答案所述,确保这些Maven依赖项在部署程序集中是至关重要的。

但是请警惕Eclipse,然后即使使用Maven更新也不刷新所有内容。如果清理,重建和重新部署,但仍然看不到lib文件夹正在填充,请尝试通过“服务器”>“添加和删除”将应用程序重新添加到服务器部署中。

这对我来说系统是畅通无阻的。


0

右键单击项目->部署程序集:查看其中是否具有Maven依赖关系以及所有其他依赖关系。如果没有,请右键单击项目-> Maven->启用工作区解析

(也许然后是Maven-> Update Project,但然后再次查看“ Deployment Assembly”,然后看看您得到了什么。)这对我来说已经解决了(终于!)。


0

在Eclipse上,选择您的Web项目->右键单击->属性->部署程序集->添加-> Java构建路径条目-> Maven依赖关系

通过此步骤,完全发布后,maven库将包含在WEB-INF / lib中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.