很多时候小伙伴在开发maven项目时,很多POM文件里的标签不熟悉,今天我们结合实际项目,重点分析一部分标签:
1、父类项目pom文件解析:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 工程的根标签。-->
<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">
<!-- 模型版本需要设置为 4.0。 -->
<modelVersion>4.0.0</modelVersion>
<!--父项目的坐标。如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值。 坐标包括group ID,artifact ID和 version。 -->
<parent>
<groupId>org.springframework.boot</groupId><!--被继承的父项目的全球唯一标识符 -->
<artifactId>spring-boot-starter-parent</artifactId><!--被继承的父项目的构件标识符 -->
<version>2.1.7.RELEASE</version><!--被继承的父项目的版本 -->
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.info.cmp</groupId><!-- 这是工程组的标识。它在一个组织或者项目中通常是唯一的。例如,一个银行组织 com.companyname.project-group 拥有所有的和银行相关的项目。 -->
<artifactId>nmp-power</artifactId><!--这是工程的标识。它通常是工程的名称。例如,消费者银行。groupId 和 artifactId 一起定义了 artifact 在仓库中的位置。 -->
<packaging>pom</packaging><!-- -->
<version>0.0.1-SNAPSHOT</version><!-- 这是工程的版本号。在 artifact 的仓库中,它用来区分不同的版本 -->
<relativePath /><!-- 父项目的pom.xml文件的相对路径。相对路径允许你选择一个不同的路径。默认值是../pom.xml。Maven首先在构建当前项目的地方寻找父项 目的pom,其次在文件系统的这个位置(relativePath位置),然后在本地仓库,最后在远程仓库寻找父项目的pom。 -->
<!--模块(有时称作子项目) 被构建成项目的一部分。列出的每个模块元素是指向该模块的目录的相对路径 -->
<modules>
<module>demo-api</module><!-- -->
<module>demo-impl</module>
</modules>
<properties><!--项目开发者属性,如即时消息如何处理等 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- -->
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><!-- -->
<java.version>1.8</java.version><!-- -->
<enduro.version>0.0.1-SNAPSHOT</enduro.version><!-- -->
</properties>
<!--项目引入插件所需要的额外依赖 -->
<dependencies>
<dependency><!-- 依赖的jar等 -->
<groupId>com.navinfo.cmp</groupId>
<artifactId>commons</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<!--项目分发信息,在执行mvn deploy后表示要发布的位置。有了这些信息就可以把网站部署到远程服务器或者把构件部署到远程仓库。 -->
<distributionManagement>
<repository><!--部署项目产生的构件到远程仓库需要的信息 -->
<id>lock-releases</id>
<name>Release Deploy</name>
<url>http://10.60.145.41:881/repository/maven-releases/</url>
</repository>
<snapshotRepository><!--构件的快照部署到哪里?如果没有配置该元素,默认部署到repository元素配置的仓库,参见distributionManagement/repository元素 -->
<id>lock-snapshot</id>
<name>Snapshot Deploy</name>
<url>http://10.60.145.41:881/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
<!-- 继承自该项目的所有子项目的默认依赖信息。这部分的依赖信息不会被立即解析,而是当子项目声明一个依赖(必须描述group ID和 artifact ID信息),如果group ID和artifact ID以外的一些信息没有描述,则通过group ID和artifact ID 匹配到这里的依赖,并使用这里的依赖信息。 -->
<dependencyManagement>
<dependencies>
<dependency><!-- -->
<groupId>org.springframework.cloud</groupId><!-- -->
<artifactId>spring-cloud-dependencies</artifactId><!-- -->
<version>Greenwich.SR2</version><!-- -->
<type>pom</type><!-- -->
<scope>import</scope><!-- -->
</dependency>
</dependencies>
</dependencyManagement>
<!--构建项目所需要的信息。参见build元素 -->
<build>
<sourceDirectory>src/main/java</sourceDirectory><!--该元素设置了项目源码目录,当构建项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径。 -->
<testSourceDirectory>src/test/java</testSourceDirectory><!--该元素设置了项目单元测试使用的源码目录,当测试项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径。 -->
<resources><!--这个元素描述了项目相关的所有资源路径列表,例如和项目相关的属性文件,这些资源被包含在最终的打包文件里。 -->
<resource><!--这个元素描述了项目相关或测试相关的所有资源路径 -->
<directory>src/main/resources/</directory><!--描述存放资源的目录,该路径相对POM路径 -->
<filtering>true</filtering>!--是否使用参数值代替参数名。参数值取自properties元素或者文件里配置的属性,文件在filters元素里列出。 -->
<includes>!--包含的模式列表,例如**/*.xml. -->
<include>**/*.yml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources/</directory>
<filtering>false</filtering>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<testResources><!--这个元素描述了单元测试相关的所有资源路径,例如和单元测试相关的属性文件。 -->
<testResource>
<directory>src/test/resources</directory>
<filtering>true</filtering>
</testResource>
</testResources>
<defaultGoal>package</defaultGoal><!--当项目没有规定目标(Maven2 叫做阶段)时的默认值 -->
<!--子项目可以引用的默认插件信息。该插件配置项直到被引用时才会被解析或绑定到生命周期。给定插件的任何本地配置都会覆盖这里的配置 -->
<pluginManagement>
<plugins><!--使用的插件列表 。 -->
<plugin><!--plugin元素包含描述插件所需要的信息。 -->
<groupId>org.apache.maven.plugins</groupId><!--插件在仓库里的group ID -->
<artifactId>maven-resources-plugin</artifactId><!--插件在仓库里的artifact ID -->
<version>2.6</version><!--被使用的插件的版本(或版本范围) -->
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration><<!--作为DOM对象的配置 -->
<archive><!-- -->
<manifest><!-- -->
<addDefaultImplementationEntries>true</addDefaultImplementationEntries><!-- -->
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries><!-- -->
</manifest>
</archive>
</configuration>
</plugin>
<!-- compiler插件参数设置,指定编码 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId><!-- -->
<artifactId>maven-compiler-plugin</artifactId><!-- -->
<version>3.0</version>
<configuration>
<source>1.8</source><!-- -->
<target>1.8</target><!-- -->
<encoding>${project.build.sourceEncoding}</encoding><!-- -->
</configuration>
</plugin>
<!-- resource插件设置,指定字符编码 -->
<!-- 配置构建时忽略测试用例 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.16</version>
<configuration>
<skipTests>true</skipTests><!-- -->
<testFailureIgnore>true</testFailureIgnore><!-- -->
<includes>
<include>**/*Test.java</include>
</includes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId><!-- -->
<artifactId>maven-assembly-plugin</artifactId><!-- -->
<version>2.4</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
2、子类pom文件配置:
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion><!-- 模型版本 -->
<!--被继承的上面的父项目的版本 -->
<parent>
<groupId>com.info.cmp</groupId><!--被继承的父项目的构件标识符 -->
<artifactId>nmp-power</artifactId><!--被继承的父项目的全球唯一标识符 -->
<version>0.0.1-SNAPSHOT</version><!--被继承的父项目的版本 -->
</parent>
<groupId>com.info.cmp</groupId>
<artifactId>power-impl</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>power-impl</name>
<description>power-impl project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
<!--构建项目需要的信息 -->
<build>
<plugins><!--使用的插件列表 。 -->
<plugin><!--plugin元素包含描述插件所需要的信息。 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--mybatis generator-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration><!--作为DOM对象的配置 -->
<source>1.8</source>
<target>1.8</target>
</configuration>
<version>3.3</version>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<dependencies><!--项目引入插件所需要的额外依赖 -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4-1201-jdbc4</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
其他可以参考POM 标签大全详解:maven教程