Bri*_*ris 345 java build-process maven-2
我有一个父项目多模块Maven项目P和三个子模块A,B和C.这两个B和C是战项目,都依赖于A.
我可以输入mvn compile在P和拥有所有的子模块正确的编译的.当我想为特定模块执行操作时,问题就来了.
我希望能够为项目打包一个war B,但是当我从B目录运行package命令时,它会抱怨它找不到依赖项A.
我从这个问题中理解:Maven和依赖模块可能Maven并不是真的设计用于这种类型的依赖解析,但这引出了如何打包的问题B?
mvn package我真的想要的时候是否必须运行整个项目层次结构B?
每次要打包时,是否必须将A的快照安装到本地存储库中B?
当A仍处于活跃开发阶段时,第二种情况并不是很有趣.
这里有什么最佳做法?
Pas*_*ent 639
这里有什么最佳做法?
使用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
Run Code Online (Sandbox Code Playgroud)
所以只需cd进入父P目录并运行:
mvn install -pl B -am
Run Code Online (Sandbox Code Playgroud)
这将构建B和B所需的模块.
请注意,如果引用的artifactId内容与目录名称不同,则需要使用冒号:
mvn install -pl :B -am
Run Code Online (Sandbox Code Playgroud)
如下所述:https://stackoverflow.com/a/26439938/480894
说家长的pom.xml包含6个模块,并且你想运行一个,乙和˚F。
<modules>
<module>A</module>
<module>B</module>
<module>C</module>
<module>D</module>
<module>E</module>
<module>F</module>
</modules>
Run Code Online (Sandbox Code Playgroud)
1-CD进入父项目
mvn --projects A,B,F --also-make clean install
Run Code Online (Sandbox Code Playgroud)
要么
mvn -pl A,B,F -am clean install
Run Code Online (Sandbox Code Playgroud)
要么
mvn -pl A,B,F -amd clean install
Run Code Online (Sandbox Code Playgroud)
注意:当您使用-am选项指定一个项目时,Maven将(直接或间接)构建指定项目所依赖的所有项目。Maven将检查项目列表,并遍历依赖树,找到它需要构建的所有项目。
虽然-am命令在多模块构建中生成特定项目所需的所有项目,但-amd或--also-make-dependents选项将Maven配置为构建一个项目以及任何依赖该项目的项目。当使用--also-make-dependents时,Maven将检查反应堆中的所有项目,以找到依赖于特定项目的项目。它将自动构建那些项目,而没有其他任何事情。
Maven绝对是为这种类型的依赖而设计的.
mvn package 将不会在您的本地存储库中安装任何内容,它只是打包项目并将其保留在目标文件夹中.
不要mvn install在父项目(A),这一切的子模块将被安装在您的计算机的Maven仓库,如果没有改变,你只需要编译/包的子模块(B)和Maven将已经打包和安装的依赖项恰到好处.
mvn install如果您更新了部分代码,则只需在父项目中使用a .
如果您之前在项目B 上运行过mvn install,它将已安装到您的本地存储库,因此在构建程序包时,Maven可以解析依赖项.因此,只要您在每次更改时安装项目B,项目A的构建都将是最新的.
您可以使用聚合器pom定义多模块项目以构建一组项目.
值得一提的是m2eclipse,它将Maven集成到Eclipse中,并允许您(可选)解决工作空间中的依赖关系.因此,如果您正在攻击多个项目,则工作区内容将用于编译.一旦您对更改感到满意,请运行mvn install(依次在每个项目上,或使用聚合器)将它们放在本地存储库中.
您可以使用以下命令编译、打包、清理特定模块:
mvn <target> -pl <MODULE> -am
Run Code Online (Sandbox Code Playgroud)
-pl-am也是make。你说你“真的只是想要B”,但这是错误的。您想要 B,但如果有任何更改(“积极开发”),您还需要更新的 A。
因此,有时您想要使用 A、B 和 C。对于这种情况,您有聚合器项目 P。对于您想要使用 A 和 B(但不想要 C)的情况,您应该创建聚合器项目 Q 。
编辑 2016:上述信息可能与 2009 年相关。截至 2016 年,我强烈建议在大多数情况下忽略这一点,并简单地使用-am或-pl命令行标志,如已接受的答案中所述。如果您使用的是 v2.1 之前的 Maven 版本,请先更改它:)
看看我的答案Maven和依赖模块.
在Maven的Reactor插件旨在应对建设项目的一部分.
您将要使用它的特定目标reactor:make.
| 归档时间: |
|
| 查看次数: |
203141 次 |
| 最近记录: |