Eclipse多模块项目中缺少Maven依赖项

Eclipse多模块项目中缺少Maven依赖项,eclipse,maven,dependencies,m2e,Eclipse,Maven,Dependencies,M2e,我正在使用STS 2.9.1(基于Eclipse3.7.2构建)和与STS捆绑的m2e插件(v1.0.200.20111228-1245)。 在包含多个模块的Eclipse项目中,我有一个缺少依赖项的问题,或者我不完全理解它应该如何工作 这是一个专业项目。 在我的项目>属性>Java构建路径>库中,我有“Maven依赖项”库,但它是空的(这就是问题所在)。 主POM没有任何依赖项,但其中声明了几个模块。 将依赖项添加到模块的POM中不会将其添加到“Maven依赖项”库中(这是我的期望),并导致E

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

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

我试过:

  • 项目>清洁
  • Maven>更新依赖项
  • Maven>更新项目配置
  • 取消选中复选框:Project>Properties>Maven>Resolve dependencies from Workspace Project
以上这些似乎都不管用

示例:
简化的项目结构:

  • 简单。项目
    • 示例模块
      • pom.xml
    • pom.xml
simple.project/pom.xml:


4.0.0
测试
简单项目
0.0.1-快照
聚甲醛
样本模块
javax.servlet
servlet api
2.5
假如
simple.project/sample-module/pom.xml:


4.0.0
简单项目
测试
0.0.1-快照
测试
样本模块
0.0.1-快照
朱尼特
朱尼特
3.8.1
测试

它不应该工作。如果项目依赖于另一个项目(使用
依赖项
)或从该项目继承(使用
父项
),则该项目仅从另一个项目导入依赖项。
模块
元素只代表一个.

我看到的第一件事是,您正在pom父级中定义依赖项。在那里,我希望看到一个
()结构。这样子模块将正确继承这些公共依赖项

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

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

Maven依赖项库为空的事实意味着EclipseMaven插件没有正确解析POM。我在使用嵌入式STS maven插件时有过非常糟糕的经历。尝试将其降级为m2e 0.10版本。您只需打开STS仪表板/查找更新/安装m2e 0.10


我希望这些技巧中的一些能够帮助您。

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

没有POM,我无法帮助您。请粘贴相关部分。还可以粘贴Eclipse显示的此错误。(我假设您使用的是M2E1.0或更高版本。)我编辑了我的原始帖子,以便更好地描述我的问题。Eclipse中显示的错误与此无关。它们是基本错误,表示我的代码中引用的某些类在类路径中丢失(因为它们没有像我预期的那样添加到“MD”库)。编译范围的依赖项也不起作用吗?问题存在于所有可能的范围,而不仅仅是测试范围。当然,关于
的用法,您是对的,但这不是本案的问题。项目可以从STS和命令行正确构建。我还将尝试降级m2e版本,但您不认为Fabricio可能是对的,我遇到的问题实际上是IDE/m2e的正确行为吗?
<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>
<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>