持续更新中…
这是pom.xml的根元素,所有的标签都包含在
指定当前POM模型的版本,对于maven2和maven3来说,它只能是4.0.0
<modelVersion>4.0.0modelVersion>
这三个元素定义了一个项目或其他的jar、pom、war的基本坐标。
定义Maven的打包方式,默认是jar。
如果是聚合模式,最外层的pom文件中的
帮助定义构建输出的一些附属构建。classifier是不能直接定义的。
没有实际作用,只是可以起一个更友好的项目名称说明而已,不是必须的,但还是推荐为每个pom文件声明一个name。
该元素下可以包含多个
依赖的类型,对应项目坐标定义的packaging,默认情况大部分都不定义,也就是jar类型。
Maven因为执行一系列编译、测试和部署运行等操作,在不同的操作下使用的classpath不同,依赖范围就是用来控制依赖与三种 classpath(编译classpath、测试classpath、运行classpath)的关系。
用来指定被依赖资源的依赖范围,可选配置有 compile、test、provided、runtime、system、import,若不指定则默认 compile。
标记依赖是否可选的。
例如项目A依赖于项目B,项目B依赖于项目X和项目Y,B对于X和Y的依赖都是可选的,此时X和Y的项目的
用来排除传递性依赖。可以包含一个或者多个
声明此元素的时候只需要指定groupId和artifactId即可,不需要version,因为Maven解析后的依赖中,不可能存在groupId和artifactId相同而version不同的两个依赖。
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-jdbcartifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-loggingartifactId>
<groupId>org.springframework.bootgroupId>
exclusion>
exclusions>
dependency>
位置在
如果
配置插件的执行,下面可以包含多个
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-source-pluginartifactId>
<executions>
<execution>
<id>attach-sourcesid>
<phase>verifyphase>
<goals>
<goal>jar-no-forkgoal>
goals>
execution>
executions>
plugin>
如上配置好之后,测试一下,执行mvn clean install(verify阶段在intall阶段之前执行),只截图相关部分,如下:
其实上面配置也可以取消verify,因为这个插件目标jar-no-fork默认配置到了生命周期package阶段,可以通过命令mvn help:describe查看,详细参考 Maven实战-1.maven命令。
为Maven插件进行全局参数配置,例如
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<configuration>
<source>1.8source>
<target>1.8target>
configuration>
plugin>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-surefire-pluginartifactId>
<configuration>
<skip>trueskip>
configuration>
plugin>
如果是配置在插件目标任务
<properties>
<java.version>1.8java.version>
properties>
<dependencies>
<dependency>
<groupId>...groupId>
<artifactId>test1artifactId>
<version>${java.version}version>
dependency>
<dependency>
<groupId>...groupId>
<artifactId>test2artifactId>
<version>${java.version}version>
dependency>
dependencies>
在此元素下,可以声明一个或多个
<repositories>
<repository>
<id>jbossid>
<name>JBoss Maven Repositoryname>
<url>http://repository.jboss.com/maven2/url>
<releases>
<enabled>trueenabled>
releases>
<snapshots>
<enabled>falseenabled>
snapshots>
<layout>defaultlayout>
repository>
repositories>
注意,任何一个
因为
对于
如果配置的远程仓库需要用户名和密码,就需要在setting文件中进行认证信息的配置,参考Maven实战-3.setting.xml标签说明。
将项目生成的构建部署到仓库中。
<distributionManagement>
<repository>
<id>nexus-releasesid>
<name>releases repositoryname>
<url>http://172.17.103.59:8081/nexus/content/repositories/releasesurl>
repository>
<snapshotRepository>
<id>nexus-snapshotsid>
<name>snapshots repositoryname>
<url>http://172.17.103.59:8081/nexus/content/repositories/snapshotsurl>
snapshotRepository>
distributionManagement>
如上,
注意:Maven会区别对待依赖的远程仓库和插件的远程仓库,当Maven需要的依赖在本地仓库不存在时,它会去所配置的远程仓库查找,而插件如果不存在本地仓库时,它就不回去远程仓库查询。
配置插件远程仓库如下:
如上,插件远程仓库的配置,除了
一般来说中央仓库包含的插件满足日常需求了,因此也不需要配置插件远程仓库。只有中央仓库不存在或自己编写了插件,才考虑上面的配置。
开启资源过滤。
聚合的最核心配置之一(另一个是
如果是聚合的父子目录结构,最外层POM文件中的如下
<modules>
<module>account-emailmodule>
<module>account-persistmodule>
modules>
如果是平行目录结构,如下
<modules>
<module>../account-emailmodule>
<module>../account-persistmodule>
modules>
声明父模块,
表示父模块POM文件的相对路径。默认值是…/pom.xml,也就是说Maven默认父POM在上一层目录中。
项目的描述信息
在此元素下声明的依赖(
子模块需要哪个依赖,只需要在自己的POM中,
如果子模块不声明依赖的使用,虽然父模块中定义了
如果子模块中定义了和父POM
类似