最近要开始准备面试,把以前做的关于maven介绍的PPT翻出来复习,就顺手稍微整理了一下。
WHY?
- jar包难以寻找
- jar包依赖的问题
- jar包版本冲突的问题
- jar包管理问题
- 项目结构问题
- 生命周期控制方式五花八门
WHAT?
Apache Maven 官网上对于它的概括:
Apache Maven is a software project management and comprehension tool.
Based on the concept of a project object model (POM), Maven can manage a project’s build, reporting and documentation from a central piece of information.
Pom file
Maven的pom文件基本结构如下,注意tag就行了,没什么好说的。
1 |
|
Maven coordinate
groupId
+artifactId
+version
三者唯一确定一个pom坐标,在maven仓库中能够唯一定位一个依赖包。
1 | <dependency> |
scope
这一参数能够确定依赖包在程序中生效的阶段。
Dependency
- 基本依赖传递
- 路径最近原则
- 最先声明原则
- 依赖排除
Plugin
这里主要说的是maven自带的插件,其实也就是它的各个生命周期,不一一展开介绍了。
其它
关于仓库
- 本地仓库
- 私服
- 其它公共仓库
- 中央仓库
e.g.1pom.xml
配置阿里云镜像仓库e.g.21
2
3
4
5
6
7
8
9
10
11
12
13
14
15project>
<repositories>
<repository>
<id>aliyun-releases</id>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>.m2/settings.xml
配置阿里云镜像仓库1
2
3
4
5
6
7
8<mirrors>
<mirror>
<id>mirror-aliyun-releases</id>
<mirrorOf>*</mirrorOf>
<name>阿里云maven镜像</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
关于版本:
- SNAPSHOT
- PRE
- RELEASE/GA
关于生命周期:
- clean
- default
- site
- clean
跳过测试
- mvn -Dmaven.test.skip=tue;
- properties中配置<maven.test.skip>true</maven.test.skip>;
- build中配置插件参数的方式.
测试类名
maven中要求测试用例使用这些文件名前缀/后缀:**/Test*.java
,**/*Test.java
,**/*TestCase.java
HOW?
Maven聚合 VS Maven继承:
- 目的
- 聚合主要是为了方便多模块快速构建;
- 继承主要是为了重用相同的配置.
- 异同
- 对于聚合来说,聚合模块是知道被聚合模块的存在的,而被聚合模块是感知不到聚合模块的存在;
- 对于继承来说,父构件是感知不到子构件的存在,而子构件需要使用parent来引用父构件;
- 上层的package类型都必须是pom.
Example
- Maven单继承问题 —— example1
- Maven反应堆(Reactor)
- Maven多环境 —— example21
- 自定义插件 —— example3