Maven模块+构build一个特定的模块
我有一个包含父项目P
和三个子模块A
, B
和C
的多模块Maven项目。 B
和C
都是战争项目,都依赖于A
我可以在P
键入mvn compile
,并正确编译所有的子模块。 当我想要为特定模块执行操作时,问题就出现了。
我想能够打包一个项目B
的战争,但是当我从B
的目录运行包命令,它抱怨说,它找不到A
的依赖关系。
我从这个问题中了解到: Maven和依赖模块 ,也许Maven并不是真正为这种types的依赖解决而devise的,但是这引出了如何打包B
?
-
当我真的想要
B
时,是否必须为整个项目层次结构运行mvn package
? -
每次我想打包
B
时,是否必须将A的快照安装到本地存储库中?
当A
还处于积极的发展阶段时,第二种情况并不是很有趣。
这里有什么最佳实践?
这里有什么最佳实践?
使用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
所以只要进入父P目录并运行:
mvn install -pl B -am
这将构buildB和B所需的模块。
Maven绝对是为这种依赖而devise的。
mvn package
不会在你的本地仓库中安装任何东西,它只是打包项目并将其保留在目标文件夹中。
如果mvn install
没有修改,你只需要编译/打包子模块(B),Maven将把它mvn install
在父项目(A)中,所有这些子模块都将被安装在你的计算机的Maven仓库中已经打包并安装了依赖关系。
如果你更新了代码的一部分,你只需要在父项目中mvn install
一个mvn install
。
如果你之前在项目B上运行了mvn install ,它将被安装到你的本地仓库,所以当你生成包时,Maven可以解决依赖关系。 所以只要你每次更改它就安装项目B,你的项目A的版本将是最新的。
您可以使用聚合器pom定义多模块项目来构build一组项目。
还值得一提的是m2eclipse ,它将Maven集成到Eclipse中,并允许您(可选)从工作区parsing依赖关系。 所以,如果你正在攻击多个项目,工作区的内容将被用于编译。 一旦您对更改感到满意,请运行mvn install(依次在每个项目上或使用聚合器)将其放入本地存储库。
看看我的答案Maven和相关模块 。
Maven Reactor插件旨在处理构build项目的一部分。
你将要使用它的特定目标reactor:make
。
你说你“真的只想要B”,但这是错误的。 你想要B,但是你也想要一个更新的A,如果它有任何改变(“积极的发展”)。
所以,有时候你想和A,B和C一起工作。对于这种情况,你有聚合器项目P.对于你想使用A和B(但不想C)的情况,你应该创build聚合器项目Q 。
编辑2016 :上述信息可能在2009年是相关的。截至2016年,我强烈build议在大多数情况下忽略这一点,并简单地使用接受的答案中所述的-am
或-pl
命令行标志。 如果您使用v2.1之前的maven版本,请先更改:)