首页 文章

Maven模块构建单个特定模块

提问于
浏览
273

我有一个多模块Maven项目,父项目 P 和三个子模块 ABC . BC 都是战争项目,都依赖于 A .

我可以在 P 中键入 mvn compile 并正确编译所有子模块 . 当我想为特定模块进行操作时,就会出现问题 .

我希望能够为项目 B 打包一个战争,但是当我从 B 's directory, it complains that it can'运行包命令时,找到 A 的依赖项 .

我从这个问题中理解:Maven and dependent modules或许Maven并不是真的设计用于这种类型的依赖解析,但这引出了如何打包 B 的问题?

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

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

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

这里有什么最佳做法?

5 回答

  • 5

    这里有什么最好的做法?

    使用Maven advanced reactor options,更具体地说:

    -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所需的模块 .

  • 2

    Maven绝对是为这种类型的依赖而设计的 .

    mvn package 将不会在您的本地存储库中安装任何内容,它只是打包项目并将其保留在目标文件夹中 .

    在父项目(A)中执行 mvn install ,所有子模块都将安装在您的计算机的Maven存储库中,如果没有更改,您只需编译/打包子模块(B),Maven将采用已经打包和安装的依赖项恰到好处 .

    如果更新了部分代码,则只需要在父项目中使用 mvn install .

  • 528

    如果您之前在项目B上运行 mvn install ,它将已安装到您的本地存储库,因此在构建程序包时,Maven可以解析依赖项 . 因此,只要每次更改项目B时都安装项目B,项目A的构建将是最新的 .

    您可以使用聚合器pom定义多模块项目以构建一组项目 .

    值得一提的是m2eclipse,它将Maven集成到Eclipse中,并允许您(可选)解析工作区中的依赖项 . 因此,如果您正在攻击多个项目,则工作区内容将用于编译 . 一旦您对更改感到满意,请运行mvn install(依次在每个项目上,或使用聚合器)将它们放在本地存储库中 .

  • 8

    看看我的回答Maven and dependent modules .

    Maven Reactor plugin旨在处理项目的构建部分 .

    你想要使用它的特定目标 reactor:make .

  • 7

    你说你“真的只想要B”,但这是假的 . 你想要B,但如果有任何变化,你也想要更新的A(“主动开发”) .

    因此,有时您希望使用A,B和C.对于这种情况,您有聚合器项目P.对于您想要使用A和B(但不想要C)的情况,您应该创建聚合器项目Q .

    编辑2016:以上信息可能与2009年相关 . 截至2016年,我强烈建议在大多数情况下忽略这一点,并简单地使用 -am-pl 命令行标志,如接受的答案中所述 . 如果您在v2.1之前使用的是maven版本,请先更改:)

相关问题