3

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

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

我试过了:

  • 项目 > 清洁,
  • Maven > 更新依赖,
  • Maven > 更新项目配置,
  • 取消选中复选框:Project > Properties > Maven > Resolve dependencies from Workspace 项目。

以上似乎都没有奏效。

示例:
简化的项目结构:

  • 简单的项目
    • ...
    • 示例模块
      • ...
      • 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>
4

3 回答 3

1

It is not supposed to work. A project only imports a dependency from another one if it depends on that project (using dependency) or if it inherits from it (using parent). The module element only represents an aggregation.

于 2012-04-17T18:50:44.400 回答
1

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

于 2012-11-15T07:57:38.883 回答
0

我看到的第一件事是您在 pom 父级中定义依赖项。在那里,我希望看到一个<dependencyManagement>请参阅此处的文档)结构。通过这种方式,子模块将正确继承那些公共依赖项。

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

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

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

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

于 2012-04-17T20:44:06.903 回答