我正在使用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”库中并添加每个依赖项。到构建路径似乎不正确也不实用。
我试过了:
以上都没有做到这一点。
示例:
简化的项目结构:
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>
答案 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
我希望其中一些技巧可以帮到你。