1、什么是Mavenapache
Maven是基于 POM(工程对象模型),经过一小段描述来对项目的代码、报告、文件进管理的一个跨平台的项目管理工具。Maven主要有两大功能:管理依赖、项目构建。api
2、Maven的安装配置服务器
下载maven
http://maven.apache.org/download.cgiide
安装过程直接解压便可工具
配置环境变量测试
而后在Path中添加 %MAVEN_HOME%\bin阿里云
测试url
在命令行窗口输入:mvn -v 或 mvn -versionspa
配置Maven
一、全局配置
在 Maven 安装目录的 conf 里面有一个 settings.xml 文件,这个文件就是 Maven 的全局配置文件。settings.xml文件中设置包含本地仓库路径、远程仓库服务器地址等配置信息。
二、用户配置
用户配置文件的地址:~/.m2/settings.xml,该文件默认没有,须要将全局配置文件拷贝一份到该目录下。若是用户配置文件不存在,则使用全局配置文件的配置。
3、Maven 命令
Maven 命令要在 pom.xml 所在目录中去执行
4、Maven的核心概念
一、坐标
在 Maven 中,坐标的做用就是定位一个惟一肯定的 jar 包。Maven世界拥有大量构建,经过坐标,咱们就能从 Maven 仓库中引用指定的 jar 包进行构建。
Maven 坐标的组成
二、依赖管理
依赖范围
依赖范围用 scope 标签来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系以下:
依赖传递
某项目工程下有A、B、C三个模块,B模块依赖A模块,C模块依赖B模块,那么B模块是C模块的直接依赖,A模块是C模块的间接依赖。也就是说:
咱们分别在C模块和B模块的 pom.xml 文件中加入以下配置:
<dependencies> <dependency> <groupId>com.test.maven</groupId> <artifactId>B</artifactId> <version>1.0-SNAPSHOT</version> <scope>compile</scope> </dependency> </dependencies>
<dependencies> <dependency> <groupId>com.test.maven</groupId> <artifactId>A</artifactId> <version>1.0-SNAPSHOT</version> <scope>compile</scope> </dependency> </dependencies>
从上图能够看出,虽然C没有直接依赖于A,可是经过简介依赖,C也能够调用A中的类和方法;
而后咱们在A模块的 pom.xml 文件中引入 Junit4.12,以下:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>compile</scope> </dependency> </dependencies>
能够看到:当 scope 标签中的值为 compile 时,直接依赖和间接依赖的模块都能使用。
总结:
依赖冲突
跨 Pom 文件的冲突
A模块的 Pom文件中依赖了 Junit 4.12版本,而B模块的 Pom文件中依赖了Junit 4.10版本,那么B 和 C都将使用 Junit 4.10版本,以下图:
同一个 Pom 文件的冲突
B模块的 Pom文件中依赖了Junit 4.10 和 Junit 4.12两个版本,则以放在下面的版本为准,就近原则。
可选依赖
Optional标签标示该依赖是否可选,默认是false,表示该依赖会传递下去,若是为true,则表示不会传递下去。
排除依赖
在 C模块的 Pom 文件中加入 Exclusions 标签排除 Junit 依赖
三、继承
若是全部模块都须要用到某个 jar 包,咱们只须要在工程那一级别的 Pom文件中设置便可。
把 A、B、C的依赖关系去掉,统一在工程的 Pom文件进行 jar 包的依赖设置,该工程下的全部模块都能使用该 jar包了。
5、Maven 仓库
什么是 Maven仓库
用来统一存储全部Maven共享构建的位置就是仓库。根据Maven坐标定义每一个构建在仓库中惟一存储路径大体为:groupId/artifactId/version/artifactId-version.packaging;
仓库的分类
6、远程仓库配置介绍
中央仓库/远程仓库
从 Maven安装没了下的 conf 中拷贝setting.xml文件放入~/.m2/repository目录下,在 mirrors标签下增长配置,能够配置多个,以下:
<!-- 配置远程镜像,即依赖包下载地址 --> <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> <mirror> <id>central</id> <name>Maven Repository Switchboard</name> <url>http://repo1.maven.org/maven2/</url> <mirrorOf>central</mirrorOf> </mirror> <!-- 中央仓库在中国的镜像 --> <mirror> <id>maven.net.cn</id> <name>oneof the central mirrors in china</name> <url>http://maven.net.cn/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors>
本地私服
认证信息
<!--配置私服仓库认证信息--> <servers> <server> <id>proj-releases</id> <username>deployment</username> <password>deployment</password> </server> <server> <id>proj-snapshot</id> <username>deployment</username> <password>deployment</password> </server> </servers>
配置私服地址
<profiles> <profile> <id>nexus</id> <!-- 配置使用公司私服进行jar包下载 --> <repositories> <repository> <id>nexus-pub</id> <name>Nexus-Pub</name> <url>http://192.168.0.1:8080/nexus/content/groups/public/</url> <releases><enabled>true</enabled></releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <!-- 配置使用公司私服进行maven插件下载 --> <pluginRepositories> <pluginRepository> <id>nexus</id> <name>Nexus</name> <url>http://192.168.0.1:8080/nexus/content/groups/public/</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles>
咱们还能配置将包构建至私服
<distributionManagement> <repository> <id>releases</id> <name>public</name> <url>http://192.168.0.1:8080/nexus/content/repositories/releases</url> </repository> <snapshotRepository> <id>snapshots</id> <name>Snapshots</name> <url>http://192.168.0.1:8080/nexus/content/repositories/snapshots</url> </snapshotRepository> </distributionManagement>
distributionManagement包含repository和snapshotRepository子元素,前者表示发布版本(稳定版本)构件的仓库,后者表示快照版本(开发测试版本)的仓库。这两个元素都须要配置id、name和url,id为远程仓库的惟一标识,name是为了方便人阅读,关键的url表示该仓库的地址。
往远程仓库部署构件的时候,每每须要认证,配置认证的方式同上。
配置正确后,运行命令mvn clean deploy,Maven就会将项目构建输出的构件部署到配置对应的远程仓库,若是项目当前的版本是快照版本,则部署到快照版本的仓库地址,不然就部署到发布版本的仓库地址。