【问题标题】:Missing Maven dependencies in Eclipse multi-module projectEclipse 多模块项目中缺少 Maven 依赖项
【发布时间】:2012-04-28 19:59:29
【问题描述】:

我正在使用 STS 2.9.1(基于 Eclipse 3.7.2 构建)和与 STS (v1.0.200.20111228-1245) 捆绑在一起的 m2e 插件。
我在包含多个模块的 Eclipse 项目中缺少依赖项,或者我不完全理解它应该如何工作。

这是一个 Maven 项目。
在我的项目 > 属性 > Java 构建路径 > 库中,我有“Maven 依赖项”库,但它是空的(这就是问题所在)。
主 POM 没有任何依赖项,但其中声明了几个模块。 向模块的 POM 添加依赖项不会将其添加到“Maven 依赖项”库中(这是我的预期),并导致 Eclipse 在源文件中显示错误。
向主 POM 添加依赖项会将其添加到“MD”库中,但当然我不想将所有模块的依赖项添加到主 POM 中,只是为了将其添加到“MD”库中并添加每个依赖项到构建路径似乎不正确也不实用。

我试过了:

  • 项目>清理,
  • Maven > 更新依赖,
  • Maven > 更新项目配置,
  • 取消选中复选框:项目 > 属性 > Maven > 解决来自工作区项目的依赖项。

以上方法似乎都不起作用。

示例:
简化的项目结构:

  • simple.project
    • ...
    • 示例模块
      • ...
      • pom.xml
    • pom.xml

simple.project/pom.xml:

<project ...>
    <modelVersion>4.0.0</modelVersion>
    <groupId>test</groupId>
    <artifactId>simple.project</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>sample-module</module>
    </modules>
    <dependencies>
        <dependency><!-- This dependency is present in "MD" lib. -->
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

simple.project/sample-module/pom.xml:

<project ...>
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <artifactId>simple.project</artifactId>
        <groupId>test</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <groupId>test</groupId>
    <artifactId>sample-module</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <dependencies>
        <dependency><!-- I've expected this dependency also to appear in "MD" lib. -->
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

【问题讨论】:

  • 没有您的 POM,我无法帮助您。请粘贴相关部分。也粘贴这个错误 Eclipse 向您显示。 (我假设您使用的是 m2e 1.0 或更高版本。)
  • 我已经编辑了我的原始帖子,以便更好地描述我的问题。
  • Eclipse 中显示的错误无关紧要。它们是基本错误,说我的代码中引用的某些类从类路径中丢失(因为它们没有像我预期的那样添加到“MD”库中)。
  • compile 范围的依赖项也不起作用吗?
  • 所有可能的范围都存在问题,不仅仅是测试。

标签: eclipse maven dependencies m2e


【解决方案1】:

它不应该工作。如果一个项目依赖于该项目(使用dependency)或从它继承(使用parent),则该项目仅从另一个项目导入依赖项。 module 元素仅代表aggregation

【讨论】:

    【解决方案2】:

    问题是很久以前的问题,但我解决了这个问题,创建了一个 Maven 项目并添加了 Maven 模块:右键单击项目和“新建 > 项目...> Maven > Maven 模块”。 之后,代码中不再显示错误。

    【讨论】:

      【解决方案3】:

      我看到的第一件事是您在 pom 父级中定义依赖项。我希望在那里看到&lt;dependencyManagement&gt; (see here the doc) 结构。这样子模块将正确地继承那些常见的依赖关系。

      除此之外,让我们开始最简单的测试。尝试从命令行中的 maven 实用程序编译您的项目。如果它有效,则说明您的 Eclipse 配置有问题,否则问题出在您定义项目的方式上。

      如果您的项目从命令行正确编译,让我们看看还会发生什么。

      Maven 依赖库为空的事实意味着 Eclipse Maven 插件无法正确解析您的 pom。我对嵌入式 STS maven 插件的体验非常糟糕。尝试将其降级到 m2e 0.10 版本。您只需要打开 STS DashBoard / Find Updates / Install m2e 0.10

      我希望其中的一些技巧可以帮助到你。

      【讨论】:

      • 当然你对&lt;dependencyManagement&gt; 的使用是正确的,但在这种情况下这不是问题。项目可以从 STS 以及命令行正确构建。我也会尝试降级 m2e 版本,但你不认为 Fabricio 可能是正确的,我遇到的问题实际上是 IDE/m2e 的正确行为吗?
      猜你喜欢
      • 2011-05-14
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-07
      相关资源
      最近更新 更多