【发布时间】:2012-03-04 01:34:26
【问题描述】:
我有一个这样的多模块项目:
- gwt 应用程序
- 型号
- webapp(取决于 gwt-app 和型号)
当我尝试在 webapps 中执行任何目标时,例如,启动码头,构建失败,因为 maven 找不到它的依赖项(我没有将模块安装到本地存储库中)。有没有一种可能的方式来引用父 pom,这样当我在子模块中运行任何目标时,它的所有依赖项都将被编译(重新编译)?
【问题讨论】:
标签: maven
我有一个这样的多模块项目:
当我尝试在 webapps 中执行任何目标时,例如,启动码头,构建失败,因为 maven 找不到它的依赖项(我没有将模块安装到本地存储库中)。有没有一种可能的方式来引用父 pom,这样当我在子模块中运行任何目标时,它的所有依赖项都将被编译(重新编译)?
【问题讨论】:
标签: maven
你的 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 不会在多模块项目中搜索未安装的依赖项。
【讨论】:
如果你让你的父 pom 像这样进行常规设置
<plugins>
</plugins>
<dependencies>
</dependencies>
然后这些组中的任何内容都会自动继承到子 pom.xml 中。子 pom 只需要其中的父部分:
<parent>
</parent>
您甚至不需要以这种方式在子 pom 中声明相同的插件或依赖项。如果您使用子 pom 或在父 pom 中,或者您想覆盖父 pom 中的某些内容,您只需要在子 pom 中列出插件或依赖项。实际上,我刚刚经历了这周的所有工作,现在我的构建工作良好(在父 pom 中有更多东西的小型子 pom,如插件配置)。
我问了一个可能对您有帮助的问题: Maven - Parent Pom - Child Inheritance
【讨论】: