maven概览
- content {:toc}
# 1. 什么是maven?
意第绪语,意为知识的积累。maven主要有两重身份:构建工具、依赖管理工具。同类工具有ant、gradle。
# 1.1 maven的设计理念(译自官方文档)
- 让构建过程变得简单。隐藏大量具体实现细节,无需了解底层原理。
- 提供统一化的构建系统
- 提供质量工程信息
- 为开发的最佳实践提供指南
- 允许向新特色透明化地迁移
# 1.2 maven的特性(译自官方文档)
- 依据最佳实践设计的简单工程设置。
- 所有工程的统一化使用。新开发者不必花时间来熟悉一个项目结构。
- 优秀的依赖管理——包括自动升级、依赖闭合(即依赖可传递)
- 能够轻松地同时作用于多个工程。
- 大量现成的jar包和元数据的仓库,这些jar包通常为开源工程,可以实时获取其最新的发布版本
- 可以使用Java或其他脚本语言编写的插件进行轻松扩展
- 需要少量配置就可以快速使用新特性
- 执行在maven外依赖管理和部署的Ant任务。
- 基于模型的构造:maven可以将任意数量的工程构建为预先定义的输出类型,如JAR、WAR或基于工程元数据的发布包,而几乎无需编写脚本。
- 工程信息的一致性:构建过程使用相同的元数据,maven能够生成一个包含你希望添加的任何文档的网页或PDF,并且加入关于工程开发状态的标准报告。
- 版本发布管理:不需要太多额外配置,maven可以整合你的版本控制系统(SVN或git)并且基于特定的版本发布工程。它可以将工程发布到一个由其他工程使用的分布式位置。Maven可以将工程发布为jar包或者源代码。
- 依赖管理:Maven鼓励使用中央库的Jar包和其他依赖包。你的工程客户端可以使用maven内部原理下载你工程所需的任何jar包。它允许maven用户在不同工程间复用jar包并且鼓励工程间的交互,以确保解决向下兼容问题。
# 2. maven仓库
在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。
Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库。(仓库就是存放依赖和插件的地方)。仓库分为三级,中央仓库、远程仓库以及本地仓库。
# 2.1 中央仓库
http://repo1.maven.org/maven2
中央仓库存储了世界上大多数开源的maven构件。
除了中央仓库外,还有一些独立的第三方库,如jboss库、primefaces库等。这些仓库拥有一些中央仓库不具有的专属jar包。
# 2.2 远程仓库(nexus私服仓库)
可以使用nexus软件搭建团队私有的远程仓库(即私服仓库)。
私服可以管理二方包(本团队开发的用于别的工程的jar包)、三方包(其他团队开发的jar包),同时也可以连接中央仓库和第三方库,从这些仓库下载私服中不存在的jar包,并储存在服务器中。
# 2.3 m2本地仓库
默认路径:(Administrator和root替换为实际登陆用户名)
windows: C:\Users\Administrator\.m2\repository
linux: root/.m2/repository
可以在settings.xml文件中修改
# 2.4 maven获取jar包的过程
st=>start: 开始
e=>end: 结束
local=>condition: 本地仓库是否有jar包
localImport=>operation: 本地导入
hasRemote=>condition: 是否配置远程仓库
central=>condition: 中央仓库是否有jar包
centralToRemote=>subroutine: 中央仓库下载到远程仓库
remote=>condition: 远程仓库是否有jar包
remoteToLocal=>subroutine: 下载到本地
fail=>end: 获取失败
st->local
local(yes)->localImport->e
local(no)->hasRemote
hasRemote(yes)->remote
remote(yes)->remoteToLocal(left)->localImport
hasRemote(no)->central
remote(no)->central
central(yes)->centralToRemote(left)->remoteToLocal
central(no)->fail
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 3. 如何使用maven
# 3.1 maven安装和配置环境变量
较简单,略
# 3.2 settings.xml文件
maven的全局配置文件
配置localRepository
<localRepository>D:/alibaba/.m2</localRepository>
配置server
配置mirror
配置profile
# 3.3 pom.xml文件
项目对象模型,maven针对具体项目的唯一配置文件
# 3.3.1 maven坐标
通过maven坐标可以唯一性地定位到仓库里的jar包。Maven的坐标元素包括groupId、artifactId、version、packaging、classifier。只要我们提供正确的坐标元素,Maven就能找到对应的构件,首先去你的本地仓库查找,没有的话再去远程仓库(私库)下载。如果没有配置远程仓库,会默认从中央仓库地址(http://repo1.maven.org/maven2)下载构件。上述5个元素中,groupId、artifactId、version是必须定义的,packaging是可选的(默认为jar),而classifier是不能直接定义的,需要结合插件使用。classifier可以包括sources、javadoc等。
# 3.4 maven生命周期和maven命令
清洁(clean)生命周期
- 清洁(clean) 删除以前构建生成的所有文件
默认(default)生命周期
- 校验(validate) - 验证项目是否正确,所有必要的信息可用
- 编译(compile) - 编译项目的源代码
- 测试(test) - 使用合适的单元测试框架测试编译的源代码。这些测试不应该要求代码被打包或部署
- 打包(package) - 采用编译的代码,并以其可分配格式(如JAR)进行打包。
- 验证(verify) - 对集成测试的结果执行任何检查,以确保满足质量标准
- 安装(install) - 将软件包安装到本地存储库中,用作本地其他项目的依赖项
- 部署(deploy) - 在构建环境中完成,将最终的包复制到远程存储库以与其他开发人员和项目共享。
站点(site)生命周期
- 网站(site) 生成项目的站点文档
注意,maven生命周期中的每个命令执行时,都会调用前面的命令,如在执行安装(install)之前按顺序(验证(validate),编译(compile),打包(package)等)执行每个默认生命周期阶段。在这种情况下,您只需要调用最后一个构建阶段来执行,安装(install)。
mvn install
最常用的命令,用于清理同时打包
mvn clean package
还可以加一些参数,如跳过测试(maven命令的本质是调用java命令,因此通过-Dxxx的形式来添加 执行参数)
mvn clean package -Dmaven.test.skip=true
本地安装第三方jar包 mvn install:install-file -Dfile=lucene-queryparser-4.6.1.jar -DgroupId=org.apache.lucene -DartifactId=lucene-queryparser -Dversion=4.6.1 -Dpackaging=jar
上传第三方jar包
mvn deploy:deploy-file -DgroupId=com.maven.api -DartifactId=maven-api -Dversion=1.0 -Dpackaging=jar -Dfile=本地jar包的地址 -Durl=上传到的私有仓库的地址 -DrepositoryId=nexus
# 3.5 扩展maven
# 3.5.1 maven插件
maven插件是由java或其他脚本语言编写的、用于扩展maven的程序。举几个例子
编译插件 用于实现生命周期中的compile阶段,默认会调用此插件,只有需要配置的时候才需要显式声明这些插件
打包插件 用于实现生命周期中的package阶段,常用的打包插件包括maven-jar-plugin和maven-war-plugin,分别将工程打包成jar包和war包,也是在生命周期中默认调用。一般需要在项目包中排除某些文件时显式声明。
mybatis-generator mybatis-generator的插件,用于生成mybatis相关的一些文件(java bean、dao层接口、xml文件等)
spring boot spring-boot的插件,可以将spring boot项目打成一个可执行的jar包。
- 01
- 深入浅出java web (二):简述http协议02-12
- 02
- 深入浅出java web(一):从根说起——servlet02-08
- 03
- 提高开发效率的奇技(二)Intellij IDEA的进阶应用10-09