您的位置:首页 > 其它

读书笔记:maven入门-聚合与继承

2013-11-23 09:01 148 查看
聚合
假设有两个独立的模块A和模块B,模块C由A和B构成
有两种目录方式:
第一种,聚合模块与其他模块的目录是父子关系
例如,C path - c:\moduleC\pom.xml
and, A path是 c:\moduleC\moduleA\pom.xml
B path是 c:\moduleC\moduleB\pom.xml
在这种情况下,C的pom中就是<module>moduleA</module>,<module>moduleB</module>
第二种,聚合模块与其他模块是平行关系
例如,C path - c:\moduleC\pom.xml
and, A path是 c:\moduleA\pom.xml
B path是 c:\moduleB\pom.xml
在这种情况下,C的pom中就是<module>../moduleA</module>,<module>../moduleB</module>
注意,
- 聚合模块pom的打包类型packaging必须是pom,不是跟子模块的pom中一样,是jar,war或者其他值了。
- 不同聚合方式下,聚合模块的pom中module的路径是不同的。

聚合的好处: 可以用一条mvn命令同时构建子模块,不用在一个模块一个模块的单独构建了。(跟以前ant跑的时候有点像)
聚合中的重点就是配置module
a. module的配置,默认是在当前模块名的路径下面,如果包含其他路径的模块,要正确配置包含 路径
b. 一个moduleC包含了其他moduleA,moduleB的时候,这个moduleC在被moduleD包含的时候,D的 POM里面可以不用在加上A,Bmodule了

2. 继承 创建parent pom:创建一个与其他子模块平行的一个模块parent,在parent模块下面创建一个pom,这个pom的打包方式必须是pom,然后在其他子模块的pom中做些修改,使子模块继承自parent模块的pom,有以下几点注意的: - 子模块中包含一下引用片段 <parent> <groupId>parent_groupId</groupId> <artifactId>parent_artifactId</artifactId> <version>parent_version</version><relativePath>../parent_pom.xml(mvn默认是../pom.xml)</relativePath> </parent>relativePath的设置非常重要,一定要根据模块的目录结构正确设置。 - 子模块中不用设置自己的groupId和artifactId,这两个元素可以从parent继承过来 - 在parent的pom中依赖用dependencyManagement元素管理,技能让子模块继承到父模块的依赖配置,又能保证子模块依赖使用的灵活性。 当parent的pom中使用了dependencyManagement,在子模块中还是要在dependencies元素中声明用到的依赖,不过这时不需要声明version和scope(如果parent的pom中依赖已经声明了scope的话)了。 但是,如果在子模块中没有声明依赖,即使在parent的POM中的dependencyManagement声明了,也不会产生任何实际效果。 - 插件配置 父pom中使用pluginManagement配置插件,如果子模块不需要使用这些插件,可以尽管将其忽略,如果子模块需要不同的插件配置,可以自行配置以覆盖父模块的pluginManagement配置。
当项目中的多个模块有同样的插件配置时,应当将配置移到父POM的pluginManagement元素中。可以要求将所有用到的插件的版本在父POM的pluginManagement元素中声明,自谋爱使用插件时不配置版本信息,这么做可以统一项目的插件版本,避免潜在的插件不一致或者不稳定问题。

在实际项目中,往往将聚合和继承同时使用,既一个POM既是聚合POM(声明modules),又是继承POM(声明parent和dependencyManagement)。由于mvn默认pom的relativepath是../pom.xml,所以当付模块在上级目录时,就可以不再需要设置relativepath了。
3. 约定优于配置(Convention Over Configuration) -src/main/java -target/classes/ -target/ -超级POM($MAVEN_HOME/LIB/MAVEN-MODEL-BUIDER-X.X.X.JAR中的org/apache/maven/model/pom-4.0.0.xml),定义了仓库及插件仓库,都关闭了snapshot的支持,定义了项目结构(主输出目录,住代码输出目录,etc),插件核心版本 等等。
4. 反应堆的裁剪mvn clean install -pl moduleA, moduleB ----- 只构建指定模块mvn clean install -pl moduleA -am ----- 同时构建所列模块的依赖模块mvn clean install -pl moduleA -amd ----- 同时构建依赖于所列模块的模块mvn clean install -rf moduleA ----- 在完整反应堆的构件顺序的基础上指定从哪个模块开始构建mvn clean install -pl moduleA -amd -rf moduleB ---- 这些命令还可以混着用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: