Maven Introduction
整理学习到的maven知识。
Concept
- Maven 是一个可以用于构建和管理任何基于Java的项目的工具.
- Maven 不仅帮我们自动化构件,还能够抽象构建过程,提供构建任务实现。
- Maven 跨平台。
- Maven 还是一个依赖管理工具和项目管理工具,提供了中央仓库,能自动下载依赖。
Maven 常用命令
- mvn clean:表示运行清理操作(会默认把target文件夹中的数据清理)。如果要把项目部署到生产环境,需使用mvn clean package命令,确保部署的是最新的内容。
- mvn package: Maven根据pom文件里packaging的配置,决定是生成jar文件还是war文件,并放到target目录下。此命令需要在项目的根目录(也就是pom.xml文件所在的目录)下运行,Maven才知道打包哪个项目。
- mvn test: 该命令执行后会去运行所有的单元测试
- mvn clean install: 该命令会把你的项目打包并放到本地仓库,可以别人就可以引用了。
- mvn site: 该命令会为你的项目生产一个文档站点,介绍你的项目,存储位置为target/site,该命令可能只有开源项目有用吧,毕竟平常没人会去关注你的项目信息。
Maven 使用
1 |
|
- 代码的第一行是XML头,指定了该xml文档的版本和编码方式。
- project是所有pom.xml的根元素,它还声明了一些POM相关的命名空间及xsd元素。
- 根元素下的第一个子元素modelVersion指定了当前的POM模型的版本,对于Maven3来说,它只能是4.0.0 代码中最重要是包含了groupId,artifactId和version了。这三个元素定义了一个项目基本的坐标,在Maven的世界,任何的jar、pom或者jar都是以基于这些基本的坐标进行区分的。
- groupId定义了项目属于哪个组,随意命名,比如谷歌公司的myapp项目,就取名为 com.google.myapp
- artifactId定义了当前Maven项目在组中唯一的ID,比如定义hello-world。
- version指定了项目当前的版本0.0.1-SNAPSHOT,SNAPSHOT意为快照,说明该项目还处于开发中,是不稳定的。
- name元素生命了一个对于用户更为友好的项目名称,虽然这不是必须的,但还是推荐为每个POM声明name,以方便信息交流
Dependency 配置
1 | <project> |
根元素project下的dependencies可以包含一个或者多个dependency元素,以声明一个或者多个项目依赖。每个依赖可以包含的元素有:
- grounpId、artifactId和version:以来的基本坐标,对于任何一个依赖来说,基本坐标是最重要的,Maven根据坐标才能找到需要的依赖。
- type:依赖的类型,对于项目坐标定义的packaging。大部分情况下,该元素不必声明,其默认值为jar
- scope:依赖的范围
- optional:标记依赖是否可选
- exclusions:用来排除传递性依赖
仓库的分类
本地仓库
一般来说,在Maven项目目录下,没有诸如lib/这样用来存放依赖文件的目录。当Maven在执行编译或测试时,如果需要使用依赖文件,它总是基于坐标使用本地仓库的依赖文件。
远程仓库-中央仓库
由于最原始的本地仓库是空的,Maven必须知道至少一个可用的远程仓库,才能在执行Maven命令的时候下载到需要的构件。中央仓库就是这样一个默认的远程仓库,Maven的安装文件自带了中央仓库的配置。
中央仓库包含了这个世界上绝大多数流行的开源Java构件,以及源码、作者信息、SCM,信息、许可证信息等,每个月这里都会接受全世界Java程序员大概1亿次的访问,它对全世界Java开发者的贡献由此可见一斑。