1、maven介绍:
2、pom.xml文件理解:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.3.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.google</groupId><artifactId>aibaiyang</artifactId><version>0.0.1-SNAPSHOT</version><name>aibaiyang</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
代码第一行是XML头,指定了改xml的版本和编码格式。紧接着是project元素,project元素是所有pom.xml的根元素,它声明了一些POM相关的命名空间及xsd元素。
modelVersion:指定了当前POM模型的版本,对于maven2以及maven3来说,它只能是4.0.0。
groupId、artifactId、version:这三个元素定义了一个项目的基本坐标,groupId定义了项目属于哪个组,例如google公司的myapp项目,那么groupId就应该是com.google.myapp;artifactId定义了Maven项目中组的唯一id,例如myapp-domain,myapp-serveice,myapp-web。
version:项目当前的版本号,0.0.1-SNAPSHOT是该项目的版本号。
name:声明了一个对于用户更为友好的项目名称,以方便信息交流,不是必须的。
3、坐标和依赖:
groupId:
artifactId:该元素定义实际项目中的一个Maven项目(模块),推荐的做法是使用实际的项目名称作为artifactId的前缀。这样做的好处是方便寻找实际的构件,使用实际的项目名称作为前缀之后,就能方便从一个lib文件夹中找到某个项目的一组构件。
version:该元素定义了Maven项目当前所处的版本。
packaging :该元素定义了Maven项目的打包方式,打包方式与所生成的构件的文件扩展名相对应。
3.1、依赖配置:
<dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>RELEASE</version><type>jar</type><scope>runtime</scope><optional>false</optional><exclusions><exclusion> </exclusion></exclusions></dependency></dependencies>
groupId、artifactId、version:依赖坐标
type:依赖类型,对应项目坐标定义的packaging。大部分情况下该元素不必声明,其默认值为jar
socpe:依赖范围
optional:标记依赖是否可选
exclusions:用来排除传递性依赖
3.2、依赖范围:
compile:编译依赖氛围。没有指定,就会默认使用该依赖范围。
test:测试依赖范围。
provided:已提供依赖范围,编译和测试有效,但在运行时无效。
runtime:运行时依赖范围。编译无效,测试和运行时有效。
system:系统依赖范围,和provided依赖范围一致。
import:导入依赖范围。
3.3、传递性依赖:
参考此文档