MAVEN的POM配置文件
一、pom文件基础配置
1. modelVersion:描述这个POM文件是遵从哪个版本的项目描述符
<modelVersion>4.0.0</modelVersion>
2. groupId: 组织标识
<groupId>com.tuozixuan.frameworkx</groupId>
3. artifactId: 项目名称
<artifactId>frameworkx</artifactId>
4. version: 版本号
<version>0.0.1-SNAPSHOT</version>
5. packaging: 打包的格式,如jar , war
<packaging>jar</packaging>
6. dependencies: 依赖关系列表,包含一个或多个dependency元素
7. dependency: 依赖关系配置
示例:
<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> <groupId>com.tuozixuan.frameworkx</groupId> <artifactId>frameworkx</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
二、坐标
1. groupId
定义当前maven项目隶属的实际项目。
groupId的表示方式与java包名的表示方式类似,通常与域名的反向一一对应。
2. artifactId
定义实际项目中的一个maven项目(模块),推荐使用实际项目名称作为artifactId的前缀,如spring-core。
3. version
定义maven项目当前所处的版本。
4. packaging
定义maven项目的打包方式,打包方式通常与所生成的构件的文件扩展名相对应,如jar、war。
5. classifier
用来帮助定义构建输出的一些附属构件,如framework-javadoc.jar、framework-sources.jar。
不能直接定义项目的classifier,附属构件不是项目直接默认生成,而是由附加插件帮助生成的。
总结:
项目构件的文件名与坐标相对应,一般规则为:artifactId-version [-classifier] .packaging,[-classifier] 表示可选。
groupId、artifactId、version是必须定义的,packaging是可选的(默认为jar),而classifier是不能直接定义的。
示例:
<groupId>com.tuozixuan.frameworkx</groupId>
<artifactId>frameworkx</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
三、依赖
1. 依赖的配置
根元素project下的dependencies可以包含一个或者多个dependency元素,以声明一个或者多个项目依赖。
每个依赖可以包含如下元素:
groupId、artifactId、version:依赖的基本坐标。
type:依赖的类型,对应项目坐标定义的packaging。一般不必声明,默认为jar。
scope:依赖的范围。
optional:标记依赖是否可选。
exclusions:用来排除传递性依赖。
2. 依赖范围
依赖范围是用来控制依赖与三种classpath(编译classpath、测试classpath、运行classpath)的关系。
compile:编译依赖范围。如果未指定则默认使用该依赖范围,对编译、测试、运行三种classpath都有效。
test:测试依赖范围。只对测试classpath有效,在编译测试代码及运行测试的时候才需要,如JUnit。
provided:已提供依赖范围。对编译和测试的classpath有效,但在运行时无效,如servlet-api。
runtime:运行时依赖范围。对测试和运行classpath有效,但在编译主代码时无效,如JDBC驱动。
system:系统依赖范围。和provided依赖范围完全一致,但是需要通过systemPath元素显式指定依赖文件的路径。
import:导入依赖范围。不会对三种classpath产生实际影响。
3. 依赖调解
如果传递依赖在两条依赖路径上有两个版本的X,则根据依赖调解的原则选择其中一个。
第一原则:路径最近者优先。
第二原则:第一声明者优先。
四、仓库
1. 仓库介绍
在Maven世界中,任何一个依赖、插件或者项目构建的输出,都可以称为构件。
maven可以在某个位置统一存储所有maven项目共享的构件,这个统一的位置就是仓库。
项目构建完毕后生成的构件也可以安装或者部署到仓库中,供其他项目使用。
2. 仓库的布局
任何一个构件都有唯一的坐标,根据这个坐标可以定义其在仓库的唯一存储路径。
该路径与坐标大致对应关系为:groupId/artifactId/version/artifactId-version.packaging
3. 仓库分类
仓库分为两类:本地仓库和远程仓库。远程仓库又可分为:*仓库、私服、其他公共库。
maven根据坐标寻找构件的时候,它会先查看本地仓库,如果本地仓库存在此构件,则直接使用;
如果本地仓库不存在此构件,或者需要查看是否有更新的此构件版本,就去远程仓库中查找,并下载到本地使用。
3.1 本地仓库
默认本地仓库目录为:C:\Users\用户名\.m2\repository\或/home/用户名/.m2/repository/
可以通过编辑.m2/settings.xml来设置本地仓库地址,如:
<settings>
<localRepository>F:\repository</localRepository>
</settings>
3.2 *仓库
*仓库是默认的远程仓库,可以通过查看$M2_HOME/lib/maven-model-builder-3.0.4.jar中的pom文件:
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>http://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
3.3 私服
私服是架设在局域网内的特殊远程仓库,私服代理广域网上的远程仓库,供局域网内的maven用户使用。
当maven需要下载构件时,先从私服请求,如不存在,则从外部远程仓库下载并缓存到私服之后,再为maven用户提供下载服务。
另外,一些无法从外部仓库下载到的构件也能从本地上传到私服上供大家使用。
搭建私服的好处:节省自己的外网带宽、加速maven构件、部署第三方构件、降低*仓库的负荷。