Maven项目中的 pom.xml
<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">
<!-- 指定了当前pom的版本 -->
<modelVersion>4.0.0</modelVersion>
<groupId>反写的公司网址+项目名</groupId>
<artifactId>项目名+模块名</artifactId>
<!--
第一位表示大版本号
第二位表示分支版本号
第三位表示小版本号
0.0.1-SNAPSHOT
SNAPSHOT 快照
alpha 内部测试
beta 公测
Release 稳定
GA 正式发布
-->
<version>0.0.1-SNAPSHOT</version>
<!-- Maven项目打包的方式,不指定的话默认为jar,还可以打包为 war zip pom -->
<packaging>jar</packaging>
<!-- 项目描述名,产生项目文档的时候被使用 -->
<name></name>
<!-- 项目的地址 -->
<url>http://maven.apache.org</url>
<!-- 项目描述 -->
<description></description>
<!-- 开发人员列表 -->
<developers></developers>
<!-- 许可证信息 -->
<licenses></licenses>
<!-- 组织信息 -->
<organization></organization>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 依赖列表 -->
<dependencies>
<!-- 依赖项 -->
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<type></type>
<!-- Maven提供了三种classpath:编译、测试、运行 -->
<!-- 依赖范围,scope是用来控制依赖与三种classpath关系的 -->
<!--
scope中可选值:
compile:默认的范围,编译测试运行都有效;
provided:在编译和测试时有效,在最后运行时不会被加入;
runtime:在测试和运行时有效;
test:只在测试时有效;
system:同provided一样在编译和测试时有效,与本机系统相关联,可移植性差
import:导入的范围,它只使用在dependencyManagement中,表示从其他的pom中导入dependecy的配置
-->
<scope>test</scope>
<!-- 设置依赖是否可选,默认是false。如果为false,子项目是继承的 -->
<optional></optional>
<!-- 排除依赖传递列表 -->
<exclusions>
<exclusion>
<!-- 这里添加需要排序依赖的坐标 -->
</exclusion>
</exclusions>
</dependency>
...
</dependencies>
<!-- 依赖的管理,这个标签主要用于定义在父模块中,供子模块继承用的 -->
<dependencyManagement>
<!-- 定义了依赖的jar列表,但是不会被引入到实际的依赖中 -->
<dependencies>
<dependency>
...
</dependency>
...
</dependencies>
</dependencyManagement>
<!-- 通常为我们构件的行为提供相应的支持 -->
<build>
<!-- 插件列表,可以引入多个插件 -->
<plugins>
<plugin>
<!-- 指明坐标 -->
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</plugin>
...
</plugins>
</build>
<!-- 子模块对父模块中pom的继承 -->
<parent>
<!-- 父模块的坐标 -->
...
</parent>
<!-- 用来聚合运行多个的Maven项目 -->
<modules>
<!-- 指定模块 -->
<module></module>
...
</modules>
</project>
其中还须注意的是:
dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显式的声明需要用的依赖。
这样做的好处就是:如果有多个子项目都引用同一样依赖,则可以避免在每个使用的子项目里都声明一个版本号,这样当想升级或切换到另一个版本时,只需要在顶层父容器里更新,而不需要一个一个子项目的修改 ;另外如果某个子项目需要另外的一个版本,只需要声明version就可。