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

Sur*_*ran 65 java eclipse tomcat web-inf maven

我有这个奇怪的问题使我的项目Maven为基础.我在Eclipse中创建了一个新的Maven项目并启用了Dynamic Web方面.但是在运行时现在它会抛出ClassNotFoundException因为Maven依赖项没有复制到WEB-INF/lib目录.我甚至尝试在POM中添加copy-dependencies部分,但它没有帮助.

有人在这里似乎已经解决了这个正确的方式,但我猜他忘了提解决方案::(

Boz*_*zho 167

这应该与eclipse和m2eclipse无关,并且可选地为了更好的支持 - m2e-wtp.此外,您不需要复制依赖项.以下是一些可能的原因:

  • 你应该调用mvn package(或右击> maven>包)并获得一个war文件 - <packaging>(在pom中)必须是war
  • 您的依赖项应该是默认范围(如果它们是providedtest它们将不包含在存档中)
  • 如果您在eclipse中的服务器上运行项目作为动态Web项目,则应打开项目属性(右键单击>属性)并选择"部署程序集".单击"添加",选择"构建路径条目",然后选择"maven依赖项".这将指示WTP将maven依赖项发送到服务器目录.

  • 不应该需要第三个选项,因为m2e-wtp应该自动执行此操作.我注意到,每当WEB-INF/lib中缺少库时,手动构建(Maven build ...目标包)会生成带有libs的jar,但是通过m2e-wtp部署到AS的战争不会包含它们.清理,关闭/打开项目有时会带来库. (3认同)
  • 我同意其他人对这一点的看法.第三个选项正是对我有用的东西,除了这篇文章以外没有其他任何地方的建议.这适用于Indigo和最近发布的Eclipse的Juno版本. (2认同)
  • 最后我注意到当libs*正在被正确部署时.classpath包含`<attribute name ="org.eclipse.jst.component.dependency"value ="/ WEB-INF/lib"/>`用于`org. eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER`条目.一旦lib再次消失,这个特定的属性也消失了.它甚至可以在本地文件历史中看到此属性的来来去去. (2认同)

Ved*_*ran 12

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

然后在你的web项目的pom.xml中添加:

    <packaging>war</packaging>
Run Code Online (Sandbox Code Playgroud)

然后右键单击项目Maven - > Update Project,它应该在Deployment Assembly中为您自动添加Maven依赖项.

  • +1 这对我也有用。如果没有它,Maven 会将依赖项打包为 jar,而您不希望这样,您希望将所有依赖项打包在一个 war 类型文件中。这还有许多其他效果,请阅读更多内容 https://maven.apache.org/pom.html (2认同)

小智 5

右键单击项目> Maven>更新Maven项目>确定为我修复它