Apache Maven是一个项目管理和构建
工具
,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。
1、Maven模型
2、仓库分类
3、Maven常用命令
上节我们演示了Maven的使用,使用的就是如下命令:
4、Maven生命周期
5、Maven坐标详解
Ⅰ、什么是坐标?
Maven中的坐标是资源的唯一标识
使用坐标来定义项目或引入项目中需要的依赖
Ⅱ、Maven坐标主要组成
groupId:定义当前Maven项目隶属组织名称(通常域名反写,例如:com.liming)
artifactId:当前项目的模块名称(类似于:maven)
version:版本
<groupId>com.liminggroupId>
<artifactId>mavenartifactId>
<version>1.0-SNAPSHOTversion>
举例:
<dependencies>
<dependency>
<!—坐标 -->
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<scope>testscope>
dependency>
dependencies>
1、依赖传递
如果A依赖B,B依赖C,那么A→B和B→C都是直接依赖,而A→C是间接依赖。
当存在间接依赖的情况时,主工程对间接依赖的jar可以访问吗?这要看间接依赖的jar包引入时的依赖范围——只有依赖范围为compile时可以访问。
2、依赖传递冲突问题
dependency
标签配置的先后顺序)3、可选依赖与排除依赖
可选依赖指对外隐藏当前所依赖的资源——不透明
<dependency>
<groupId>com.liminggroupId>
<artifactId>maven_01artifactId>
<version>1.0-SNAPSHOTversion>
<optional>falseoptional>
dependency>
排除依赖指主动断开依赖的资源,被排除的资源无需指定版本——不需要
举例:
当前工程为public,直接依赖environment。environment依赖commons-logging的1.1.1对于public来说是间接依赖。当前工程public直接依赖commons-logging的1.1.2加入exclusions配置后可以在依赖environment的时候排除版本为1.1.1的commons-logging的间接依赖。
Environment工程:
<dependency>
<groupId>commons-logginggroupId>
<artifactId>commons-loggingartifactId>
<version>1.1.1version>
dependency>
当前工程:
<dependency>
<groupId>com.liming.mavengroupId>
<artifactId>EnvironmentartifactId>
<version>0.0.1-SNAPSHOTversion>
<exclusions>
<exclusion>
<groupId>commons-logginggroupId>
<artifactId>commons-loggingartifactId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>commons-logginggroupId>
<artifactId>commons-loggingartifactId>
<version>1.1.2version>
dependency>
4、继承
继承描述的是两个工程之间的关系,与Java中的继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承
步骤:
1、创建Maven模块,设置打包类型为pom
<packaging>pompackaging>
2、在父工程的pom文件中配置依赖关系(子工程将沿用父工程中的依赖关系)
<dependencies>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.2.10.RELEASEversion>
dependency>
......
dependencies>
3、配置子工程中可选的依赖关系
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.2.13version>
dependency>
dependencies>
......
dependencyManagement>
4、在子工程中配置当前工程所继承的父工程
<parent>
<groupId>com.liminggroupId>
<artifactId>maven_parentartifactId>
<version>1.0-SNAPSHOTversion>
<relativePath>../maven_parent/pom.xmlrelativePath>
parent>
5、在子工程中配置使用父工程中可选依赖的坐标
dependencies>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
dependency>
dependencies>
以对Spring的jar包依赖为例:Spring的每一个版本中都包含
spring-core
、spring-context
等jar包。我们应该导入版本一致的Spring jar包,而不是使用4.0.0
的spring-core的同时使用4.1.1
的spring-context。
问题是如果我们想要将这些jar包的版本统一升级为4.1.1,是不是要手动一个个修改呢?显然,我们有统一配置属性的方式:
<properties>
<spring.version>4.1.1.RELEASEspring.version>
properties>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-coreartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-jdbcartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-ormartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>${spring.version}version>
dependency>
这样一来,进行版本调整的时候只改一改地方就行了
6、配置文件加载属性
1、定义属性
<properties>
<spring.version>5.2.10.RELEASEspring.version>
<junit.version>4.12junit.version>
<jdbc.url>jdbc:mysql://127.0.0.1:3306/ssm_dbjdbc.url>
properties>
2、配置文件中引入属性
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=${jdbc.url}
jdbc.username=root
jdbc,password=root
3、开启资源目录加载属性的过滤器
<build>
<resources>
<resource>
<directory>${project.basedir}/src/main/resourcesdirectory>
<filtering>truefiltering>
resource>
resources>
build>
4、配置maven打war包时,忽略web.xml检查
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-war-pluginartifactId>
<version>3.2.3version>
<configuration>
<failOnMissingWebXml>falsefailOnMissingWebXml>
configuration>
plugin>
7、版本管理
1、工程版本:
SNAPSHOT(快照版本)
RELEASE(发布版本)
2、发布版本: