元素归类
POM文件中的元素可以归纳为以下几类
- 基础元素
- 构建设置元素
- 项目信息元素
- 环境设置
基础元素
<project>
...
//父pom信息,在继承中会用到
<parent>...</parent>
//以下3个为项目的坐标信息
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
//打包类型,默认为jar
<packaging>...</packaging>
//项目依赖管理
<dependencies>...</dependencies>
//项目依赖版本管理
<dependencyManagement>...</dependencyManagement>
//子模块声明,使用聚合时用到
<modules>...</modules>
//属性
<properties>...</properties>
...
</project>
dependency
<project>
...
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<type>jar</type>
<scope>test</scope>
<optional>true</optional>
</dependency>
...
</dependencies>
...
</project>
- type:依赖组件的文件后缀,一般与packaging一致
构建设置
<project>
...
//生命周期default用到的构建配置
<build>...</build>
//生命周期site用到的构建配置
<reporting>...</reporting>
...
</project>
基本构建元素
<build>
//命令行未输入参数时的默认参数,可填插件方法(比如compiler:compile)或者构建阶段(compile)
<defaultGoal>install</defaultGoal>
<directory>${basedir}/target</directory>
<finalName>${artifactId}-${version}</finalName>
//过滤属性文件
<filters>
<filter>filters/filter1.properties</filter>
</filters>
...
</build>
资源文件相关元素
...
<resources>
<resource>
//目标文件目录路径
<targetPath>META-INF/plexus</targetPath>
//是否过滤,是的话会使用过滤属性文件对文件进行进行插值替换
<filtering>false</filtering>
//资源文件目录路径
<directory>${basedir}/src/main/plexus</directory>
//包含资源文件
<includes>
<include>configuration.xml</include>
</includes>
//排除资源文件
<excludes>
<exclude>**/*.properties</exclude>
</excludes>
</resource>
</resources>
<testResources>
...
</testResources>
...
插件
<build>
...
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
//是否加载插件拓展,默认false
<extensions>false</extensions>
//是否继承父pom中声明的配置,默认true
<inherited>true</inherited>
//插件配置
<configuration>
<classifier>test</classifier>
</configuration>
//插件依赖,常用来指定版本或者排除依赖
<dependencies>...</dependencies>
//插件任务
<executions>...</executions>
</plugin>
</plugins>
</build>
插件管理
类比依赖和依赖版本管理,插件管理包含的元素与插件一样,常用于继承,复用配置。
目录管理
...
<build>
<sourceDirectory>${basedir}/src/main/java</sourceDirectory>
<scriptSourceDirectory>${basedir}/src/main/scripts</scriptSourceDirectory>
<testSourceDirectory>${basedir}/src/test/java</testSourceDirectory>
<outputDirectory>${basedir}/target/classes</outputDirectory>
<testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory>
...
</build>
拓展
...
<build>
...
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ftp</artifactId>
<version>1.0-alpha-3</version>
</extension>
</extensions>
...
</build>
项目信息
这部分常见于开源项目
<project>
...
//项目名称
<name>...</name>
//项目描述
<description>...</description>
//项目URL
<url>...</url>
//开始年份
<inceptionYear>...</inceptionYear>
//项目遵循的协议
<licenses>...</licenses>
//项目所属组织
<organization>...</organization>
//项目的开发成员
<developers>...</developers>
//项目的贡献者
<contributors>...</contributors>
...
</project>
环境设置
<project>
...
//缺陷跟踪系统
<issueManagement>...</issueManagement>
//持续集成系统
<ciManagement>...</ciManagement>
//项目成员邮件列表,开发者和用户可以通过邮件列表与项目成员联系
<mailingLists>...</mailingLists>
//版本管理
<scm>...</scm>
//构建正确执行的群体要求
<prerequisites>...</prerequisites>
//依赖仓库
<repositories>...</repositories>
//插件仓库
<pluginRepositories>...</pluginRepositories>
//分发管理
<distributionManagement>...</distributionManagement>
//部分配置
<profiles>...</profiles>
...
</project>