1.聚合(aggregator)
所谓聚合,顾名思义。就是把多个模块或项目聚合到一起。
我们能够建立一个专门负责聚合工作的Maven project - aggregator。
建立该project的时候。我们要注意下面几点:
1.该aggregator本身也做为一个Maven项目,它必须有自己的POM
2.它的打包方式必须为: packaging
3.引入了新的元素:modules---module
4.版本号:聚合模块的版本号和被聚合模块版本号一致
5.relative path:每一个module的值都是一个当前POM的相对文件夹
6.文件夹名称:为了方便的高速定位内容。模块所处的文件夹应当与其artifactId一致(Maven约定而不是硬性要求),总之。模块所处的文件夹必须和<module>模块所处的文件夹</module>相一致。
7.习惯约定:为了方便构建,通常将聚合模块放在项目文件夹层的最顶层,其他聚合模块作为子文件夹存在。这样当我们打开项目的时候。第一个看到的就是聚合模块的POM
8.聚合模块降低的内容:聚合模块的内容不过一个pom.xml文件,它不包括src/main/java、src/test/java等文件夹,由于它不过用来帮助其他模块构建的工具。本身并没有实质的内容。
9.聚合模块和子模块的文件夹:他们能够是父子类,也能够是平行结构,当然假设使用平行结构,那么聚合模块的POM也须要做出对应的更改。
2.继承
继承就是避免反复
多个模块可能依赖同样的元素,比方说每一个模块都须要Junit,使用spring的时候,其核心jar也必须都被引入
在编译的时候,maven-compiler-plugin插件也要被引入
怎样配置继承:
1.说到继承肯定是一个父子结构,那么我们在aggregator中来创建一个parent project
2.<packaging>: 作为父模块的POM,其打包类型也必须为POM
3.结构:父模块仅仅是为了帮助我们消除反复,所以它也不须要src/main/java、src/test/java等文件夹
4.新的元素:<parent> , 它是被用在子模块中的
5.<parent>元素的属性:<relativePath>: 表示父模块POM的相对路径。在构建的时候。Maven会先依据relativePath检查父POM,假设找不到,再从本地仓库查找
6.relativePath的默认值: ../pom.xml
7.子模块省略groupId和version: 使用了继承的子模块中能够不声明groupId和version, 子模块将隐式的继承父模块的这两个元素
可被继承的POM元素
groupId:项目组ID,项目坐标的核心元素
version: 项目版本号, 项目坐标的核心元素
description: 项目的描写叙述信息
organization: 项目的组织信息
inceptionYear: 项目的创始年份
url: 项目的URL地址
developers: 项目开发人员信息
contributors: 项目的贡献者信息
distributionManagement: 项目的部署配置
issueManagement: 项目的缺陷跟踪系统信息
ciManagement: 项目的持续集成系统信息
scm: 项目的版本号控制系统信息
mailingLists: 项目的邮件列表信息
properties: 自己定义的maven属性
dependencies: 项目的依赖配置
dependencyManagement: 项目的依赖管理配置
repositories: 项目的仓库配置
build: 包含项目的源代码文件夹配置、输出文件夹配置、插件配置、插件管理配置等
reporting: 包含项目的报告输出文件夹配置、报告插件配置等
3.maven的依赖管理
dependencies是能够被继承的。这个时候我们就想到让我们的发生了共用的依赖元素转移到parent中。这样我们又进一步的优化了配置。但是问题也随之而来,假设有一天我创建了一个新的模块,但是这个模块不须要这些parent的依赖,这时候怎样处理?
添加一个新的元素:dependencyManagement
现dependencyManagement也是可以被继承的。这恰恰满足了我们的须要。它既可以让子模块继承到父模块的依赖配置,又能保证子模块依赖使用的灵活性
dependencyManagement的特性:在dependencyManagement中配置的元素既不会给parent引入依赖,也不会给它的子模块引入依赖,不过它的配置是可继承的最佳实践
4.相关问题
如果你的项目使用maven构建的话,当项目要上线,部署到服务器上去的时候或许会碰见这样的问题。
问题就是,服务器上没有maven的环境,
也就是说,项目所依赖到的那些仓库(repository)中的jar包你需要单独提取出来上传到服务器中去
解决办法:
办法1:mvn package
pom.xml :<packaging>是war的话, mvn package 的命令将项目依赖的jar包打到web-inf 下的lib文件夹
完成后console会提示war包的位置信息
办法2:mvn assembly:assembly
在${project}/target 文件夹下发现新生成的 {artifactId}-jar-with-dependencies.jar 这个文件,命令执行的过程中,maven会将jar包所依赖的包导出,并且解压(unpackage),一并放在这个{artifactId}-jar-with-dependencies.jar包