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

Posted

技术标签:

【中文标题】Maven 依赖项在 WEB-INF/lib 中不可见【英文标题】:Maven dependencies not visible in WEB-INF/lib 【发布时间】:2011-08-30 07:44:23 【问题描述】:

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

有人here 似乎已经以正确的方式解决了这个问题,但我猜他忘了提到解决方案::(

【问题讨论】:

试用最新的 m2eclipse 插件。我认为它有两个部分,它帮助我获得了 Eclipse 类路径上的 Maven 依赖项。 为了让 maven 与 wtp 配合得很好,我必须从这里安装核心和附加组件:m2eclipse.sonatype.org/installing-m2eclipse.html @xecaps 谢谢,但我已经这样做了 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

右键项目->部署程序集: 看看你那里是否有 Maven 依赖项和所有其他依赖项。 如果不, 右键项目 -> Maven -> 启用工作区解析

(也许然后是 Maven -> 更新项目,但然后再次查看“部署程序集”,看看你有什么。) 这为我解决了(终于!)。

【讨论】:

【参考方案3】:

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

但是要警惕 Eclipse,即使使用 Maven 更新也不会刷新所有内容。如果您清理、重建和重新部署,但仍然没有看到 lib 文件夹被填充,请尝试通过 Servers>Add and Remove 将应用程序删除并重新添加到服务器部署中。

这为我疏通了系统。

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

我刚刚做了 maven -> 更新项目对我有用。

【讨论】:

【参考方案6】:

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

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

    <packaging>war</packaging>

之后只需右键单击项目,Maven -> 更新项目,它应该会自动在部署程序集中为您添加 Maven 依赖项。

【讨论】:

+1 这对我也有用。没有它,Maven 会将依赖项打包为 jar,而您不希望这样,您希望将所有依赖项打包在一个 war 类型文件中。这还有很多其他的效果,阅读更多maven.apache.org/pom.html maven -> 更新项目也对我有用。在 Eclipse Luna 版本中似乎有必要【参考方案7】:

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

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

【讨论】:

我同意其他人对此的看法。第三个选项正是对我有用的,除了这篇文章之外,在其他任何地方都没有看到过这个建议。这适用于 Indigo 和最近发布的 Eclipse Juno 版本。 此解决方案忽略 pom.xml 中的“提供”范围,因此在我的情况下,我无法将整个 Maven 依赖项添加到部署程序集。您是否有任何解决方法可以从 Maven 依赖库中禁用某些 jar? 使用第三个选项后它可以工作,但如果我使用 Maven->Update Project,它会恢复并从部署程序集中删除条目。有什么办法可以解决这个问题? 第三个选项应该不需要,因为 m2e-wtp 应该自动执行此操作。我注意到,每当 WEB-INF/lib 中缺少库时,手动构建(Maven 构建...目标包)会生成一个带有库的 jar,但是通过 m2e-wtp 部署到 AS 的战争不会包含它们.清理、关闭/打开项目有时会将库带回来。 最终我注意到,当库 正在 正确部署时,.classpath 包含 &lt;attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/&gt;org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER 条目。一旦库再次消失,这个特定属性也消失了。甚至可以在本地文件历史记录中看到此属性来来去去。【参考方案8】:

你想使用复制依赖插件

参见this 帖子和docs

【讨论】:

【参考方案9】:

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

【讨论】:

以上是关于Maven 依赖项在 WEB-INF/lib 中不可见的主要内容,如果未能解决你的问题,请参考以下文章

如何让maven 将工程依赖的jar 复制到WEB-INF/lib 目录下

如何将 maven 托管依赖项复制到 war\web-inf\lib 中,以便我可以在 Eclipse 中以调试模式运行我的 GWT 2.0 应用程序?

maven依赖本地非repository中的jar包

Maven 没有将一些 JAR 复制到 WEB-INF/lib

如何签署放置在 maven 中 /WEB-INF/lib 目录中的 JAR 文件

LibreOffice Maven 依赖项?