1).坐标
groupId:组织名称+”.”+项目名称
artifactId:项目的模块名
version:项目坂本号
<!-- pom 版本号 -->
<modelVersion>4.0.0</modelVersion>
<!-- 组织名称+项目名 -->
<groupId>com.hsp.maven</groupId>
<!-- 模块名称 -->
<artifactId>makeFriend</artifactId>
<!-- SNAPSHOT 指正在开发的版本,RELEASE指成熟版本 -->
<version>0.0.1-SNAPSHOT</version>
<!--
工程打包后的类型
如果是web项目就是war包
-->
<packaging>jar</packaging>
<name>makeFriend</name>
<url>http://maven.apache.org</url>
2).maven项目有三套classpath
1.Java主目录的classpath
2.test测试目录的claspath
3.运行时的classpath
依赖范围:就是指定的一个依赖包对哪些classpath有效,用配置依赖的范围。
常用的依赖范围有:compile,test,provided,runtime
<!-- 对第三方的依赖管理 -->
<dependencies>
<dependency>
<!-- 依赖包的坐标 -->
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
compile:项目编译时需要这个包,三套classpath都需要的包
test:只对test的classpth有效
provided:只对test和Java主目录的classpth有效
runtime:只对运行时的classpath有效
3).依赖传递
假设:
A←B 第一直接依赖
B←C 第二直接依赖
那么:
A←C 间接依赖
所以:
依赖的传递是受依赖的范围影响的;
当依赖不同版本同一个jar包时:A对log4j1.2.9依赖,B对log4j1.2.9依赖,C会依赖1.2.8的,就近原则;
可选依赖:true指定依赖包不会传递下去,false指定依赖包会传递下去;
4).maven仓库管理
1.中央仓库
互联网上一个巨大的maven仓库,这里面有绝大多数的依赖包,但是也有少数的依赖包不再中央仓库里面。例如:http://mvnrepository.com/ ,在这里可以找到中央仓库的依赖包的坐标;
2.本地仓库
默认在:~/.m2/repository/ 就是本地仓库,当执行maven命令或者添加依赖包时,如果本地仓库不存在需要的依赖,maven会到中央仓库去把所需要的依赖下载到本地仓库,如果第二次再使用相同的依赖,就不需要下载了。本地仓库可以上传或安装自己的依赖包,使用命令是mvn install;
3.私服仓库
下面会讲解;
5).maven生命周期
清理—编译—测试—报告—打包—部署
maven生成站点信息:clean site
maven的插件,我们执行的是生命周期,真正做事的是插件,每一个生命周期都会绑定一个或者多个插件:
在pom.xml添加一个插件如下:
<build>
<plugins>
<plugin>
<!-- 插件的坐标 -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.1</version>
<configuration>
<outputDirectory>/absolute/path/to/the/output/directory</outputDirectory>
<finalName>filename-of-generated-jar-file</finalName>
<attach>false</attach>
</configuration>
</plugin>
</plugins>
</build>
6).maven继承
子工程需要父工程的模块,直接在子工程的pom配置父工程的坐标即可。
<!-- parent用于继承 -->
<parent>
<!-- 父工程的坐标 -->
<groupId>com.hsp.maven</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 父工程pom的相对路径 -->
<relativePath>../parent/pom.xml</relativePath>
</parent>
7).maven聚合
当子工程的数量增多时,可以把它们聚合用一个父工程里面,统一管理,父工程执行maven命令时,被聚合的子工程也会执行。
<modules>
<module>../son</module>
<module>../brother</module>
<module>../sister</module>
<module>../daughter</module>
</modules>
8).maven私服
访问外网的maven仓库很不方便,为了速度更快和团队开发,可以在本地和中央仓库之间建立一个私服。(也可以应用于公司内网)
安装nexus和建立索引后,在浏览器访问tomcat的nexus,由上图可以看出nexus相当与一个中间缓冲,更加细致管理本地的jar包;
在用户的setting.xml下配置nexus,这样当maven项目需要jar时,会先在nexus中查找,当nexus没有时,才会去中央仓库找;
<mirror>
<id>nexus</id>
<!-- 拦截任何请求 -->
<mirrorOf>*</mirrorOf>
<!-- 将请求转发到本地nexus -->
<url>http://localhost:8080/nexus/content/groups/public/</url>
</mirror>