一、Maven基本概念
1、概念
Maven是一款自动化构建工具,专注服务于Java平台的项目构建和依赖管理。
构建的环节:清理–>编译–>测试–>报告–>打包–>安装–> 部署
2、本地仓库的配置
主要配置apache-maven-3.2.2\conf\settings.xml文件。
以及准备好的仓库位置
配置阿里云镜像:
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
3、Pom文件
Project Object Model:项目对象模型。将Java工程的相关信息封装为对象作为便于操作和管理的模型。Maven工程的核心配置。
4、坐标
使用如下三个向量在Maven的仓库中唯一的确定一个Maven工程。
[1]groupId:公司或组织的域名倒序+当前项目名称
[2]artifactId:当前项目的模块名称
[3]version:当前模块的版本
5、依赖管理
如果A依赖B,B依赖C,那么A→B和B→C都是直接依赖,而A→C是间接依赖。
6、依赖的范围
-
compile
[1]main目录下的Java代码可以访问这个范围的依赖
[2]test目录下的Java代码可以访问这个范围的依赖
[3]部署到Tomcat服务器上运行时要放在WEB-INF的lib目录下
例如:对Hello的依赖。主程序、测试程序和服务器运行时都需要用到。
-
test
[1]main目录下的Java代码不能访问这个范围的依赖
[2]test目录下的Java代码可以访问这个范围的依赖
[3]部署到Tomcat服务器上运行时不会放在WEB-INF的lib目录下
例如:对junit的依赖。仅仅是测试程序部分需要。
-
provided
[1]main目录下的Java代码可以访问这个范围的依赖
[2]test目录下的Java代码可以访问这个范围的依赖
[3]部署到Tomcat服务器上运行时不会放在WEB-INF的lib目录下
例如:servlet-api在服务器上运行时,Servlet容器会提供相关API,所以部署的时候不需要。
依赖的原则:解决jar包冲突
-
路径最短者优先
-
路径相同时先声明者优先
依赖的排除
eg:
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
统一管理Jar包版本:
eg:
<!--统一管理当前模块的jar包的版本-->
<properties>
<spring.version>4.0.0.RELEASE</spring.version>
</properties>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
二、继承
由于非compile范围的依赖信息是不能在“依赖链”中传递的,所以有需要的工程只能单独配置。使用继承机制就可以将这样的依赖信息统一提取到父工程模块中进行统一管理。
1、创建父工程:
父工程的打包方式为pom,父工程只需要保留pom.xml文件即可。
<groupId>com.SQLBoy.maven</groupId>
<artifactId>Parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
2、在子工程中引用父工程
eg:
<!--继承-->
<parent>
<groupId>com.SQLBoy.maven</groupId>
<artifactId>Parent</artifactId>
<version>1.0-SNAPSHOT</version>
<!--指定从当前pom.xml文件出发寻找父工程的pom.xml文件的相对路径-->
<relativePath>../Parent/pom.xml</relativePath>
</parent>
3、在父工程中管理依赖
将Parent项目中的dependencies标签,用dependencyManagement标签括起来。
<!--依赖管理-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
在子项目中重新指定需要的依赖**,删除范围和版本号**
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
三、聚合
在总的聚合工程中使用modules/module标签组合,指定模块工程的相对路径即可
Maven可以根据各个模块的继承和依赖关系自动选择安装的顺序