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

时间:2012-04-17 13:09:24

标签: eclipse maven dependencies m2e

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

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

我试过了:

  • 项目>干净,
  • Maven>更新依赖项,
  • Maven>更新项目配置,
  • 取消选中复选框:项目>属性> Maven>解决Workspace项目中的依赖关系。

以上都没有做到这一点。

示例:
简化的项目结构:

  • 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 /采样模块/ 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>

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

问题是从不久前开始,但我解决了这个问题,创建了一个Maven项目并添加了Maven模块:右键单击项目和“New&gt; Project ...&gt; Maven&gt; Maven Module”。 之后,代码中不再显示错误。

答案 2 :(得分:0)

我看到的第一件事是您在pom父级中定义依赖项。在那里,我希望看到<dependencyManagement>see here the doc)结构。通过这种方式,子模块将正确地继承这些公共依赖项。

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

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

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

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