Maven 模块构建单个特定模块

新手上路,请多包涵

I have a multi-module Maven project with a parent project P and three sub-modules A , B , and C . BC 都是战争项目,都依赖于 A

我可以在 mvn compile P 并正确编译所有子模块。当我想对特定模块进行操作时,问题就来了。

我希望能够为项目 B 打包战争,但是当我从 B 的目录运行打包命令时,它抱怨找不到依赖项对于 A

我从这个问题中了解到: Maven 和依赖模块 也许 Maven 并不是真正为这种类型的依赖解析而设计的,但这引出了我如何打包 B 的问题?

  1. 当我真的只想要 B 时,是否必须为整个项目层次结构运行 mvn package

  2. 每次我想打包 B 时,我是否必须将 A 的快照安装到我的本地存储库中?

A 仍在积极开发中时,第二种情况并不有趣。

这里有什么最佳实践吗?

原文由 Brian Ferris 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 727
2 个回答

这里有什么最佳实践吗?

使用 Maven 高级反应器选项,更具体地说:

 -pl, --projects
        Build specified reactor projects instead of all projects
-am, --also-make
        If project list is specified, also build projects required by the list

所以只需 cd 进入父 P 目录并运行:

 mvn install -pl B -am

这将构建 B 和 B 所需的模块。

请注意,如果您引用与目录名称不同的 artifactId ,则需要使用冒号:

 mvn install -pl :B -am

如此处所述:

原文由 Pascal Thivent 发布,翻译遵循 CC BY-SA 4.0 许可协议

假设 Parent pom.xml 包含 6 个模块,并且您想运行 ABF

 <modules>
        <module>A</module>
        <module>B</module>
        <module>C</module>
        <module>D</module>
        <module>E</module>
        <module>F</module>
  </modules>

1- cd 进入父项目

 mvn --projects A,B,F --also-make clean install

要么

mvn -pl A,B,F -am clean install

要么

mvn -pl A,B,F -amd clean install

注意: 当您使用 -am 选项指定项目时,Maven 将构建指定项目所依赖的所有项目(直接或间接)。 Maven 将检查项目列表并遍历依赖关系树,找到它需要构建的所有项目。

虽然 -am 命令在多模块构建中生成特定项目所需的所有项目,但 -amd–also-make-dependents 选项将 Maven 配置为构建项目和依赖于该项目的任何项目。使用 –also-make-dependents 时,Maven 将检查反应器中的所有项目以查找依赖于特定项目的项目。它将自动构建这些项目,仅此而已。

原文由 Waqas Ahmed 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题