我有一个像这样的多模块项目:
当我尝试在webapps中执行任何目标时,例如,启动jetty,构建失败,因为maven无法找到其依赖项(我没有将模块安装到本地存储库中)。有没有一种方法可以引用父pom,这样当我在子模块中运行任何目标时,它的所有依赖项都将被编译(重新编译)?
答案 0 :(得分:1)
你的pom文件的例子很棒但是在多模块项目中我总是在dependencyManagement标签中声明父pom中的依赖项:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>group-a</groupId>
<artifactId>artifact-a</artifactId>
<version>1.0</version>
</dependency>
...
在模块pom中,我只关注没有版本的依赖:
<dependencies>
<dependency>
<groupId>group-a</groupId>
<artifactId>artifact-a</artifactId>
</dependency>
...
确保每个模块都使用相同的版本。
要记住的是,maven中的模块不会从父级继承依赖项。您必须声明模块本身使用的依赖项。
另一件事是,我相信当你在IDE(在工作区中搜索依赖项)之外运行时,你需要在本地仓库中安装每个模块。如果您没有在父pom上执行,我认为maven不会在多模块项目中搜索未安装的依赖项。
答案 1 :(得分:0)
如果你让你的父pom有像
这样的常规设置<plugins>
</plugins>
<dependencies>
</dependencies>
然后,这些组中的任何内容都会自动继承到子pom中。儿童pom只需要其中的父节:
<parent>
</parent>
您甚至不需要以这种方式在子pom中声明相同的插件或依赖项。您只需要在子pom中列出插件或依赖项,如果您使用或在父pom中,或者您想覆盖父pom中的某些内容。我实际上刚刚经历了这个星期的整个过程,并且我的构建现在运行得很好(小型poms在父pom中有更多东西,如插件配置)。
我问了一个可能对你有帮助的问题: Maven - Parent Pom - Child Inheritance