对 maven
一直没有研究过,最近学习了一下Eleven_Lee老师的课程https://www.imooc.com/learn/443,本文其实是一篇学习笔记。
<groupId>
: 组织名,一般是网址的反写+项目名<artifactId>
: 项目名<version>
: 版本号<packaging>
: 打包方式
命令 | option | 含义 |
---|---|---|
mvn | compile | 编译 |
test | 测试 | |
package | 打包 | |
clean | 删除target目录(字节码和测试报告等) | |
install | 安装jar到本地仓库中 |
引入构建包的流程如下,假设本地两个maven工程A和B,其中A依赖B:
- 进入B工程的目录,进行mvn install。效果是将B工程编包并发布到本地仓库
- 在项目A的pom文件中,添加对B的依赖
- 进入A工程目录,进行mvn compile编译即可。
在maven中,groupId
,artifactId
和version
一起形成坐标的概念。坐标能够唯一确定jar或者pom。
maven
的仓库分为本地仓库和远程仓库。
超级pom(全球中央仓库):
在setting文件中,可以设置镜像仓库,提高下载速度:
<mirrors>
<mirror>
<id>groups</id>
<mirrorOf>*</mirrorOf>
<url>http://maven.net.cn/content/groups/public/</url>
</mirror>
</mirrors>
可以更改本地仓库的存放目录:
<localRepository>D:/maven/lib/</localRepository>
4. maven生命周期
maven存在3条生命周期流程,分别是clean(清理项目),default(构建项目)和site(生成项目站点)。下边分别给出每个生命周期流程中包含的具体内容。
- clean(项目清理)流程
- pre-clean:执行清理前的工作
- clean:清理上一次构建生成的所有文件
- post-clean:执行清理后的文件
- default(构建项目)流程
- compile:编译
- test:测试
- package:打包
- install:安装
- site(生成项目站点)流程
- pre-site:在生成项目站点前要完成的工作
- site:生成项目的站点文档
- post-site:在生成项目站点之后要完成的工作
- site-deploy:发布生成的站点到服务器上
5. maven中pom文件标签在执行某个生命周期的时候,该生命周期的步骤会从开始的步骤依次执行。
以default为例:
执行compile,则只执行compile
执行test,则执行compile,test
执行package,则执行compile,test,package
执行install,则执行compile,test,package,install。
<project>
: 根元素,包含约束信息
<modelVersion>
: 指定当前pom的版本
<groupId>
: 反写的公司网址+项目名
<artifactId>
: 项目名+模块名
<version>
: 版本号。一般为三位数,大版本号.分支版本号.小版本号。版本类型一般有5种:snapshot(快照)、alpha(内部测试)、beta(公测)、release(稳定版本)、GA(正式发布)。
<packaging>
: 打包方式,一般为jar、war、zip或者pom
<name>
: 项目描述名
<url>
: 项目地址
<description>
: 项目描述
<dependencies>
: 依赖列表,包含依赖项
<dependency>
: 依赖项,其中包含groupId,artifactId,version,type,scope(依赖范围),optional(设置依赖是否可选,默认false),exclusions(排除依赖传递列表)
<dependencyManagement>
: 依赖管理,包含一个依赖列表。
<build>
:
<plugins>
: 插件列表
<plugin>
:
<groupId>
:
<artifactId>
:
<parent>
: 对父模块的pom的集成
<modules>
: 实现maven的聚合
<module>
: 实现maven的聚合
<scope>
标签
scope标签指定的依赖范围,有3种作用域,分别是编译、测试和运行时期。
scope标签的值,有6种类型,分别是:
- compile:默认值,编译测试和运行都有效
- provided:编译和测试的时候有效,运行时候不生效
- runtime:测试和运行时候有效
- test:只在测试的时候有效
- system:在编译和测试的时候有效,与本机系统关联,可移植性较差
- import:导入的范围,使用在dependencyManagement标签中,表示从其他的pom中导入dependency的配置
maven中的依赖具有传递性。如果项目A依赖项目B,项目B依赖项目C,那么项目A也是依赖项目C的。这一点可以在项目的依赖列表中看到。
maven中可以使用<exclusions>
标签进行依赖排除。如下图所示,在pom中依赖了hongxing-nage,但是却排除了hongxing-nage所依赖的hongxing-bge。
所谓的依赖冲突,举例说明,工程A依赖B和C,但是B和C分别依赖不同版本的D。那么对于工程A来说,到底是依赖了哪个版本的D呢?
解决依赖冲突有2个基本的原则:
- 短路优先原则。 比如存在如下的两个依赖路径,那么A最终会依赖version2的X版本。
- A->B->C->X(version1)
- A->D->X(version2)
- 如果路径长度相同,那么先声明先解析。
9.1 maven的聚合,是指将所有登记到module的模块全部编译打包。
目标:将B、C、D聚合到A
实现方式:将工程A的pom文件中的packaging标签设置成pom,添加modules标签,将B、C、D分别添加进来。
<modules>
<module>B</module>
<module>C</module>
<module>D</module>
</modules>
9.2 maven继承:
实现方式:
- 创建A项目,packaging的值为pom
- 将依赖X添加到项目A中
- 在项目B中添加parent标签,引入父pom的坐标
- 项目B的pom中,不需要指定X的版本号了
热门评论
先收藏再看~