Maven POM

来自Linux78|wiki

POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。

执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。

POM 中可以指定以下配置:

项目依赖

插件

执行目标

项目构建 profile

项目版本

项目开发者列表

相关邮件列表信息

在创建 POM 之前,我们首先需要描述项目组 (groupId), 项目的唯一ID。

<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">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.project-group</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
</project>

所有 POM 文件都需要 project 元素和三个必需字段:groupId,artifactId,version。

节点	描述project
project	工程的根标签。
modelVersion	模型版本需要设置为 4.0。
groupId	这是工程组的标识。它在一个组织或者项目中通常是唯一的。例如,一个银行组织 com.companyname.project-group 拥有所有的和银行相关的项目。
artifactId	这是工程的标识。它通常是工程的名称。例如,消费者银行。groupId 和 artifactId 一起定义了 artifact 在仓库中的位置。
version	这是工程的版本号。在 artifact 的仓库中,它用来区分不同的版本。例如:com.company.bank:consumer-banking:1.0
               com.company.bank:consumer-banking:1.1

POM 标签详解

<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.0http://maven.apache.org/maven-v4_0_0.xsd">
   <parent>
       <artifactId />
       <groupId />
       <version />
       <relativePath />
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <groupId>asia.banseon</groupId>
   <artifactId>banseon-maven2</artifactId>
   <packaging>jar</packaging>
   <version>1.0-SNAPSHOT</version>
   <name>banseon-maven</name>
   <url>http://www.baidu.com/banseon</url>
   <description>A maven project to study maven.</description>
   <prerequisites>
       <maven />
   </prerequisites>
   <issueManagement>
       <system>jira</system>
       <url>http://jira.baidu.com/banseon</url>
   </issueManagement>
   <ciManagement>
       <system />
       <url />
       <notifiers>
           <notifier>
               <type />
               <sendOnError />
               <sendOnFailure />
               <sendOnSuccess />
               <sendOnWarning />
               <address />
               <configuration />
           </notifier>
       </notifiers>
   </ciManagement>
   <inceptionYear />
   <mailingLists>
       <mailingList>
           <name>Demo</name>
           <post>banseon@126.com</post>
           <subscribe>banseon@126.com</subscribe>
           <unsubscribe>banseon@126.com</unsubscribe>
           <archive>http:/hi.baidu.com/banseon/demo/dev/</archive>
       </mailingList>
   </mailingLists>
   <developers>
       <developer>
           <id>HELLO WORLD</id>
           <name>banseon</name>
           <email>banseon@126.com</email>
           <url />
           <roles>
               <role>Project Manager</role>
               <role>Architect</role>
           </roles>
           <organization>demo</organization>
           <organizationUrl>http://hi.baidu.com/banseon</organizationUrl>
           <properties>
               <dept>No</dept>
           </properties>
           <timezone>-5</timezone>
       </developer>
   </developers>
   <contributors>
       <contributor>
           <name />
           <email />
           <url />
           <organization />
           <organizationUrl />
           <roles />
           <timezone />
           <properties />
       </contributor>
   </contributors>
   <licenses>
       <license>
           <name>Apache 2</name>
           <url>http://www.baidu.com/banseon/LICENSE-2.0.txt</url>
           <distribution>repo</distribution>
           <comments>A business-friendly OSS license</comments>
       </license>
   </licenses>
   <scm>
       <connection>
           scm:svn:http://svn.baidu.com/banseon/maven/banseon/banseon-maven2-trunk(dao-trunk)
       </connection>
       <developerConnection>
           scm:svn:http://svn.baidu.com/banseon/maven/banseon/dao-trunk
       </developerConnection>
       <tag />
       <url>http://svn.baidu.com/banseon</url>
   </scm>
   <organization>
       <name>demo</name>
       <url>http://www.baidu.com/banseon</url>
   </organization>
   <build>
       <sourceDirectory />
       <scriptSourceDirectory />
       <testSourceDirectory />
       <outputDirectory />
       <testOutputDirectory />
       <extensions>
           <extension>
               <groupId />
               <artifactId />
               <version />
           </extension>
       </extensions>
       <defaultGoal />
       <resources>
           <resource>
               <targetPath />
               <filtering />
               <directory />
               <includes />
               <excludes />
           </resource>
       </resources>
       <testResources>
           <testResource>
               <targetPath />
               <filtering />
               <directory />
               <includes />
               <excludes />
           </testResource>
       </testResources>
       <directory />
       <finalName />
       <filters />
       <pluginManagement>
           <plugins>
               <plugin>
                   <groupId />
                   <artifactId />
                   <version />
                   <extensions />
                   <executions>
                       <execution>
                           <id />
                           <phase />
                           <goals />
                           <inherited />
                           <configuration />
                       </execution>
                   </executions>
                   <dependencies>
                       <dependency>
                           ......
                       </dependency>
                   </dependencies>
                   <inherited />
                   <configuration />
               </plugin>
           </plugins>
       </pluginManagement>
       <plugins>
           <plugin>
               <groupId />
               <artifactId />
               <version />
               <extensions />
               <executions>
                   <execution>
                       <id />
                       <phase />
                       <goals />
                       <inherited />
                       <configuration />
                   </execution>
               </executions>
               <dependencies>
                   <dependency>
                       ......
                   </dependency>
               </dependencies>
               <goals />
               <inherited />
               <configuration />
           </plugin>
       </plugins>
   </build>
   <profiles>
       <profile>
           <id />
           <activation>
               <activeByDefault />
               <jdk />
               <os>
                   <name>Windows XP</name>
                   <family>Windows</family>
                   <arch>x86</arch>
                   <version>5.1.2600</version>
               </os>
               <property>
                   <name>mavenVersion</name>
                   <value>2.0.3</value>
               </property>
               <file>
                   <exists>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/
                   </exists>
                   <missing>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/
                   </missing>
               </file>
           </activation>
           <build>
               <defaultGoal />
               <resources>
                   <resource>
                       <targetPath />
                       <filtering />
                       <directory />
                       <includes />
                       <excludes />
                   </resource>
               </resources>
               <testResources>
                   <testResource>
                       <targetPath />
                       <filtering />
                       <directory />
                       <includes />
                       <excludes />
                   </testResource>
               </testResources>
               <directory />
               <finalName />
               <filters />
               <pluginManagement>
                   <plugins>
                       <plugin>
                           <groupId />
                           <artifactId />
                           <version />
                           <extensions />
                           <executions>
                               <execution>
                                   <id />
                                   <phase />
                                   <goals />
                                   <inherited />
                                   <configuration />
                               </execution>
                           </executions>
                           <dependencies>
                               <dependency>
                                   ......
                               </dependency>
                           </dependencies>
                           <goals />
                           <inherited />
                           <configuration />
                       </plugin>
                   </plugins>
               </pluginManagement>
               <plugins>
                   <plugin>
                       <groupId />
                       <artifactId />
                       <version />
                       <extensions />
                       <executions>
                           <execution>
                               <id />
                               <phase />
                               <goals />
                               <inherited />
                               <configuration />
                           </execution>
                       </executions>
                       <dependencies>
                           <dependency>
                               ......
                           </dependency>
                       </dependencies>
                       <goals />
                       <inherited />
                       <configuration />
                   </plugin>
               </plugins>
           </build>
           <modules />
           <repositories>
               <repository>
                   <releases>
                       <enabled />
                       <updatePolicy />
                       <checksumPolicy />
                   </releases>
                   <snapshots>
                       <enabled />
                       <updatePolicy />
                       <checksumPolicy />
                   </snapshots>
                   <id />
                   <name />
                   <url />
                   <layout />
               </repository>
           </repositories>
           <pluginRepositories>
               <pluginRepository>
                   <releases>
                       <enabled />
                       <updatePolicy />
                       <checksumPolicy />
                   </releases>
                   <snapshots>
                       <enabled />
                       <updatePolicy />
                       <checksumPolicy />
                   </snapshots>
                   <id />
                   <name />
                   <url />
                   <layout />
               </pluginRepository>
           </pluginRepositories>
           <dependencies>
               <dependency>
                   ......
               </dependency>
           </dependencies>
           <reports />
           <reporting>
               ......
           </reporting>
           <dependencyManagement>
               <dependencies>
                   <dependency>
                       ......
                   </dependency>
               </dependencies>
           </dependencyManagement>
           <distributionManagement>
               ......
           </distributionManagement>
           <properties />
       </profile>
   </profiles>
   <modules />
   <repositories>
       <repository>
           <releases>
               <enabled />
               <updatePolicy />
               <checksumPolicy />
           </releases>
           <snapshots>
               <enabled />
               <updatePolicy />
               <checksumPolicy />
           </snapshots>
           <id>banseon-repository-proxy</id>
           <name>banseon-repository-proxy</name>
           <url>http://192.168.1.169:9999/repository/</url>
           <layout>default</layout>
       </repository>
   </repositories>
   <pluginRepositories>
       <pluginRepository>
           ......
       </pluginRepository>
   </pluginRepositories>
   <dependencies>
       <dependency>
           <groupId>org.apache.maven</groupId>
           <artifactId>maven-artifact</artifactId>
           <version>3.8.1</version>
           <type>jar</type>
           <classifier></classifier>
           <scope>test</scope>
           <systemPath></systemPath>
           <exclusions>
               <exclusion>
                   <artifactId>spring-core</artifactId>
                   <groupId>org.springframework</groupId>
               </exclusion>
           </exclusions>
           <optional>true</optional>
       </dependency>
   </dependencies>
   <reports></reports>
   <reporting>
       <excludeDefaults />
       <outputDirectory />
       <plugins>
           <plugin>
               <groupId />
               <artifactId />
               <version />
               <inherited />
               <configuration />
               <reportSets>
                   <reportSet>
                       <id />
                       <configuration />
                       <inherited />
                       <reports />
                   </reportSet>
               </reportSets>
           </plugin>
       </plugins>
   </reporting>
   <dependencyManagement>
       <dependencies>
           <dependency>
               ......
           </dependency>
       </dependencies>
   </dependencyManagement>
   <distributionManagement>
       <repository>
           <uniqueVersion />
           <id>banseon-maven2</id>
           <name>banseon maven2</name>
           <url>file://${basedir}/target/deploy</url>
           <layout />
       </repository>
       <snapshotRepository>
           <uniqueVersion />
           <id>banseon-maven2</id>
           <name>Banseon-maven2 Snapshot Repository</name>
           <url>scp://svn.baidu.com/banseon:/usr/local/maven-snapshot</url>
           <layout />
       </snapshotRepository>
       <site>
           <id>banseon-site</id>
           <name>business api website</name>
           <url>
               scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web
           </url>
       </site>
       <downloadUrl />
       <relocation>
           <groupId />
           <artifactId />
           <version />
           <message />
       </relocation>
       <status />
   </distributionManagement>
   <properties />

</project>