前言
pom.xml文件是maven项目的核心文件,通过对怕pom文件的解析,何以获取项目的一些基本信息以及所依赖的jar包等信息。
pom文件项目信息的设定
一个简单项目的pom文件内容
<?xml version="1.0" encoding="UTF-8"?> ----指定版本和编码
<project xmlns="..."
xmlns:xsi="..."
xsi:schemaLocation="...">
<modelVersion>4.0.0<modelVersion> ----指定当前pom的版本,对于maven2和maven3来说他只能是4.0.0
<groupId>com.csdn.mvnbook</groupId> ----groupId指定项目属于哪个组,往往与公司或组织存在关联
<artifactId>hello-world</artifactId> ----artifactId指定当前maven项目在组中的唯一Id
<version>1.0-SNAPSHOT</version> ----指定hello world的版本
<name>Maven Hello World Project</name> ----指定项目有一个友好的项目名称,不是必须的
</project>
pom文件中依赖的添加
<pre name="code" class="html"><project>
<dependencies>
<dependency>
<groupId>org.sonatype.nexus</groupId> ----当前项目隶属的实际项目,maven项目与实际项目并不是一一对应的方式
<artifactId>nexus-indexer</artifactId> ----该元素定义实际项目中的一个模块,使用项目名作为前缀
<version>2.0.0</version> ----定义该项目所处版本
<packaging>jar</packaging> ----指定maven项目的打包方式
</dependency>
</dependencies>
</project>
pom文件中添加的依赖其实也是maven项目形式的,通过groupId,artifactId,version等元素来定位jar包的位置。
dependency子元素的解释
<dependency>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<type>...</type>
<scope>...</scope>
<optional>...</optional>
<exclusions>
<exclusion>
...
</exclusion>
</exclusions>
</dependency>
groupId,artifactId,version是依赖的基本坐标;type对应项目坐标定义的packaging,默认为jar;scope:以来的范围;optional依赖是否可选;exclusion依赖是否可选。
scope依赖的范围
maven在编译项目的时候也需要自己的一套classpath,依赖范围就是用来控制依赖于这三种的classpath(编译classpath,测试classpath与运行classpath),maven有以下几种依赖的范围:
(1)compile:编译依赖范围,如果没有指定,就会默认使用这个范围。使用次依赖范围对编译,测试与运行都有效。
(2)test:编译依赖范围,使用此范围的依赖只会在测试classpath有效,典型的是Junit依赖。
(3)provided:已提供依赖范围,在编译与测试时有效,在运行时无效。例如servlet-api在编译和测试时需要改依赖,在运行时容器会提供次依赖。
(4)runtime:运行时依赖,对于测试与运行时有效,编译时无效,例如数据库连接驱动依赖,在运行时才有有效。
(5)system:系统依赖范围。使用此依赖范围需要通过systemPath元素显示的指定依赖所在的路径,不通过maven仓库解析,与本机系统有关。
如:
<dependency>
<groupId>javax.sql</groupId>
<artifactId>jdbc-stdext</artifactId>
<version>2.0.0</version>
<scope>system</version>
<systemPath>${java.home}/lib/rt.jar</systemPath>
</dependency>