POM的语法规则

一、POM简介

pom作为项目对象模型,通过使用pom.xml来实现管理maven项目,主要描述了项目的如下部分:配置文件、开发者需要遵循的规则、缺陷管理系统、组织和licenses、项目的url、项目的依赖性和其它所有的项目相关因素。

二、POM的语法规则

一份比较全的pom.xml文件可以参考如下,通过它我们来对pom.xml中的语法规则进行说明。

<project>
  <modelVersion>4.0.0</modelVersion>  <!--指定了当前pom版本-->
<!--maven2.0必须是这样写,现在是maven2唯一支持的版本-->
  <!-- 基础设置 -->
  <groupId>...</groupId> <!--整个系统的名称,-一般用反写的公司网址+项目名,比如com.moxie.hi->
  <artifactId>...</artifactId> <!--子模块名称,项目名+模块名-->
  <version>0.0.1-SNAPSHOT</version> <!--第一个数0表示大版本号;第二个数0表示分支版本号;第三个数1表示小版本号;SNAPSHOT 表示快照,另外还有alpha 内部测试、beta 公测、release 稳定、GA 正式发布-->
  <packaging>...</packaging>  <!--打包类型,可取的值有war zip pom-->
  <name>...</name> <!--项目描述名-->
  <url>...</url> <!--项目地址-->
  <description>...</description> <!--项目描述-->
  <dependencies>...</dependencies> <!--依赖列表-->
  <parent>...</parent>
  <dependencyManagement>...</dependencyManagement> <!--依赖的管理-->
  <modules>...</modules> <!--聚合多个模块进行编译-->
  <properties>...</properties>

  <!--构建设置 -->
  <build>...</build>
  <reporting>...</reporting>
 <!-- 更多项目信息 -->
  <name>...</name>
  <description>...</description>
  <url>...</url>
  <inceptionYear>...</inceptionYear>
  <licenses>...</licenses>
  <organization>...</organization>
  <developers>...</developers>
  <contributors>...</contributors>

  <!-- 环境设置-->
  <issueManagement>...</issueManagement>
  <ciManagement>...</ciManagement>
  <mailingLists>...</mailingLists> 
  <scm>...</scm>
  <prerequisites>...</prerequisites>
  <repositories>...</repositories>
  <pluginRepositories>...</pluginRepositories>
  <distributionManagement>...</distributionManagement>
  <profiles>...</profiles>
</project>

上面关于pom.xml的描述不一定详尽,下面做出部分补充。

2.1 依赖冲突的排查与解决

依赖冲突可以见此例,在项目中有两个依赖项:A和B,但是A和B同时依赖了C,依赖的C不是同一个版本。
依赖冲突的排查,可以通过添加检查插件来发现,参考如下:

<reporting>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-project-info-reports-plugin</artifactId>
            </plugin>
        </plugins>
 </reporting>

运行命令:mvn project-info-reports:dependencies 可以查看依赖报告。
去除冲突依赖项,可以考虑使用< exclusion>…< /exclusion>,比如我们需要在某个dependency中去除某个依赖项:

<!-- Struts2 -->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>${struts.version}</version>
            <exclusions>
                <exclusion>  <!--去除依赖项-->
                    <groupId>org.freemarker</groupId>
                    <artifactId>freemarker</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

2.2 POM中的继承

maven提供继承关系,子pom可以继承父pom的配置信息,因此可以在父pom中声明一些可供子pom继承的配置,实现“一次声明,多次使用”。在子pom中关于继承的写法可以参考如下:

<modelVersion>4.0.0</modelVersion>
  <parent> <!--表示继承关系-->
    <groupId>com.thoughtworks.xstream</groupId>
    <artifactId>xstream-parent</artifactId>
    <version>1.4.3</version>
  </parent>
  <artifactId>xstream</artifactId>
  <packaging>jar</packaging>
  <name>XStream Core</name>

上述继承关系表示父pom是com.thoughtworks.xstream的xstream-parent的1.4.3版本。

2.3 POM中的聚合

在pom中可以通过一个大的项目来整合各个小的模块,这种整合关系可称为POM的聚合

 <modules>
         <module>my-app</module>
 </modules>

2.4 Maven属性

在pom.xml文件中可以通过< properties>元素自定义一个或多个Maven属性,然后再POM的其它地方使用${属性名}的方式引用该属性,这种做法的最大意义在于消除重复和统一管理。Maven总共有6类属性,内置属性、POM属性、自定义属性、Settings属性、Java系统属性和环境变量属性。

1.内置属性
常用的内置属性有两个,一个是${basedir}表示项目根目录,即包含pom.xml文件的目录;一个是 ${version}表示项目版本。
2.POM属性
用户可以使用该类属性引用POM文件中对应元素的值。如 ${project.artifactId}就对应了< project>< artifactId>元素的值,常用的POM属性包括:
$ { project.build.sourceDirectory}:项目的主源码目录,默认为src/main/java/
$ {project.build.testSourceDirectory}:项目的测试源码目录,默认为src/test/java/
$ {project.build.directory} : 项目构建输出目录,默认为target/
$ {project.outputDirectory} : 项目主代码编译输出目录,默认为target/classes/
$ {project.testOutputDirectory}:项目测试主代码输出目录,默认为target/testclasses/
$ {project.groupId}:项目的groupId
$ {project.artifactId}:项目的artifactId
$ {project.version}:项目的version,与${version} 等价
$ {project.build.finalName}:项目打包输出文件的名称,默认为${project.artifactId}- $ {project.version}
3.自定义属性
自定义属性在此略,可以自行百度查阅。
4.Settings属性
与POM属性同理,用户可以使用settings。开头的属性引用settings.xml文件中的元素的值。
5.Java系统属性
所有Java系统属性都可以用maven属性引用,如 ${user.home}指向了用户目录。
6.环境变量属性
所有环境变量属性都可以使用env.开头的Maven属性引用,

2.5 POM 构建配置

构建中的插件管理

<pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.1</version>
                    <configuration>
                        <tomcat-url>http://localhost:8080/manager/html</tomcat-url>
                        <server>tomcat_localtest</server>
                    </configuration>
                </plugin>
            </plugins>
</pluginManagement>

指定构建时需要的资源

<resources>
            <resource>
                <targetPath>WEB-INF/resource</targetPath>
                <!-- 不对文件中的表达式进行处理 -->
                <filtering>false</filtering>
                <directory>${basedir}/src/test/resources</directory>
                <includes>
                    <include>include.xml</include>
                </includes>
                <excludes>
                    <exclude>exclude.xml</exclude>
                </excludes>
            </resource>
  </resources>

参考

1.maven pom聚合与继承
2.Maven pom.xml中的元素modules、parent、properties以及import

3.Maven中POM.XML详解
4.Maven常用命令和 pom.xml解析
5.SpringCloud注解和配置以及pom依赖说明

猜你喜欢

转载自blog.csdn.net/polo2044/article/details/83617992