maven简介
maven是一个项目管理工具,基于项目对象模型(POM Project Object Model)来管理项目的构建、报告和文档信息
使用maven构建项目
使用maven命令构建一个maven项目
1 | mvn archetype:generate -DgroupId=com.zhanghe -DartifactId=test -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=1.0-SNAPSHOT |
DarchetypeArtifactId: 表示项目骨架,常用的有两种
- maven-archetype-quickstart 普通的java项目
- maven-archetype-webapp java web项目
项目目录结构
默认结构
项目源码:src\main\java
资源目录: src\main\resources
Web 项目源码:src\main\webapp
测试源码:src\test\java
Maven 项目结构(Project Object Model POM):pom.xml
1
2
3
4
5
6
7
8
9目录结构
src 源码 主程序
main
- java 源文件
- resources 框架配置文件
test
- java
- resources
pom.xml
自定义结构
其实任何一个Maven项目都隐式的继承了一个超级POM,而这个pom位于$MAVEN_HOME/lib/maven-model-builder-x.x.x.jar中的org/apache/maven/model/pom-4.0.0.xml,很多默认的配置都是在这个pom.xml中定义的,如果想要自定义,需要的是覆盖该pom中的某些配置
如可以在<build>
节点中<sourceDirectory>
指定源码目录 <resources>
指定资源目录
pom文件
pom是maven构建工程的重要配置,其内包含有
- dependencies 依赖
- plugins 插件
- goals
- build
- project version
- developers
- mailing list
所有的pom都继承自一个父POM,其中包含了一些可以被继承的默认设置
1 | 查看父pom的默认配置 |
依赖坐标
坐标
groupid: 公司域名倒叙+项目名
artifactid: 模块名
version: 版本
packaging: 打包方式
classifer: 定义输出的一些附件
在仓库中的工程标识就是按照groupid:artifactid:version来进行标识的
设置属性
1 | <properties> |
maven仓库
maven仓库是指存放maven依赖jar包的位置
本地仓库:存储在本地电脑的,在使用maven时,会先从本地仓库获取,如果本地仓库没有,才会去远程仓库下载并保存在本地,可以在settings.xml中配置本地仓库的位置
<localRepository>本地仓库位置</localRepository>
远程仓库:
如果在中央仓库找不到依赖,会停止构建过程并输出错误信息,为了避免这种情况,可以使用远程仓库,由开发人员自己定制仓库
私服:局域网内由公司内部搭建,定制的仓库
其他远程仓库:其他公司的定制的仓库
可以在pom.xml中进行配置
1
2
3
4
5
6
7
8
9
10
11
12<repository>
<id>archiva.internal</id>
<name>Internal Release Repository</name>
<url>http://zhhll.com/nexus/content/repositories/releases/
</url>
</repository>
<snapshotRepository>
<id>archiva.snapshots</id>
<name>Internal Snapshot Repository</name>
<url>http://zhhll.com/nexus/content/repositories/snapshots/
</url>
</snapshotRepository>
中央仓库:由maven官方提供的仓库,不过由于maven的中央仓库在国外,网速很慢,可以使用仓库的镜像
在settings.xml中配置
1
2
3
4
5
6
7
8<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
mirrorOf配置为central是因为maven内置的pom文件中设置了一个id为central的repository
依赖搜索顺序
本地仓库(localRepositories) > 全局的profile中的repositories仓库 >该应用下的 POM配置的repositories仓库 > mirrors全局仓库
repositories一般配的是私服仓库