首页 > 代码库 > pom.xml

pom.xml

一、什么是POM

Project Object Model,项目对象模型。通过xml格式保存的pom.xml文件。作用类似ant的build.xml文件,功能更强大。该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。

 

一个完整的pom.xml文件,放置在项目的根目录下。

<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/maven-v4_0_0.xsd">    <modelVersion>4.0.0</modelVersion>    <!– The Basics –>    <groupId></groupId>    <artifactId></artifactId>    <version></version>    <packaging></packaging>    <dependencies></dependencies>    <parent></parent>    <dependencyManagement></dependencyManagement>    <modules></modules>    <properties></properties>    <!– Build Settings –>    <build></build>    <reporting></reporting>    <!– More Project Information –>    <name></name>    <description></description>    <url></url>    <inceptionYear></inceptionYear>    <licenses></licenses>    <organization></organization>    <developers></developers>    <contributors></contributors>    <!– Environment Settings –>    <issueManagement></issueManagement>    <ciManagement></ciManagement>    <mailingLists></mailingLists>    <scm></scm>    <prerequisites></prerequisites>    <repositories></repositories>    <pluginRepositories></pluginRepositories>    <distributionManagement></distributionManagement>    <profiles></profiles>  </project>  

二、基本设置

1、maven的协作相关属性

<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/maven-v4_0_0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>org.codehaus.mojo</groupId>    <artifactId>my-project</artifactId>    <version>1.0</version>    <packaging>war</packaging>  </project>  
  1. groupId : 组织标识,例如:org.codehaus.mojo,在M2_REPO目录下,将是: org/codehaus/mojo目录。
  2. artifactId : 项目名称,例如:my-project,在M2_REPO目录下,将是:org/codehaus/mojo/my-project目录。
  3. version : 版本号,例如:1.0,在M2_REPO目录下,将是:org/codehaus/mojo/my-project/1.0目录。
  4. packaging : 打包的格式,可以为:pom , jar , maven-plugin , ejb , war , ear , rar , par

2、POM之间的关系

主要用于POM文件的复用。

a)依赖关系:依赖关系列表(dependency list)是POM的重要部分

<dependencies>     <dependency>       <groupId>junit</groupId>       <artifactId>junit</artifactId>       <version>4.0</version>       <scope>test</scope>     </dependency></dependencies>  
  1. groupId , artifactId , version :
  2. scope : compile(default),provided,runtime,test,system
  3. exclusions

b)继承关系:继承其他pom.xml配置的机制。

比如父pom.xml:

<project>    [...]    <dependencies>      <dependency>        <groupId>junit</groupId>        <artifactId>junit</artifactId>        <version>4.4</version>        <scope>test</scope>      </dependency>    </dependencies>    [...]  </project>  

在子pom.xml文件继承它的依赖(还可以继承其他的:developers and contributors、plugin lists、reports lists、plugin executions with matching ids、plugin configuration):

[...]  <parent>  <groupId>com.devzuz.mvnbook.proficio</groupId>    <artifactId>proficio</artifactId>    <version>1.0-SNAPSHOT</version>  </parent>  [...]  

在这种机制下,maven还提供了一个类似java.lang.Object的顶级父pom.xml文件:

<project>    <modelVersion>4.0.0</modelVersion>    <name>Maven Default Project</name>    <repositories>      <repository>        <id>central</id>        <name>Maven Repository Switchboard</name>        <layout>default</layout>        <url>http://repo1.maven.org/maven2</url>        <snapshots>          <enabled>false</enabled>        </snapshots>      </repository>    </repositories>    <pluginRepositories>      <pluginRepository>        <id>central</id>        <name>Maven Plugin Repository</name>        <url>http://repo1.maven.org/maven2</url>        <layout>default</layout>        <snapshots>          <enabled>false</enabled>        </snapshots>        <releases>          <updatePolicy>never</updatePolicy>        </releases>      </pluginRepository>    </pluginRepositories>    <build>      <directory>target</directory>      <outputDirectory>target/classes</outputDirectory>      <finalName>${project.artifactId}-${project.version}</finalName>      <testOutputDirectory>target/test-classes</testOutputDirectory>      <sourceDirectory>src/main/java</sourceDirectory>      <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>      <testSourceDirectory>src/test/java</testSourceDirectory>      <resources>        <resource>          <directory>src/main/resources</directory>        </resource>      </resources>      <testResources>        <testResource>          <directory>src/test/resources</directory>        </testResource>      </testResources>      <pluginManagement>         <plugins>           <plugin>             <artifactId>maven-antrun-plugin</artifactId>             <version>1.1</version>           </plugin>                 <plugin>             <artifactId>maven-assembly-plugin</artifactId>             <version>2.2-beta-2</version>           </plugin>           <plugin>             <artifactId>maven-clean-plugin</artifactId>             <version>2.2</version>           </plugin>           <plugin>             <artifactId>maven-compiler-plugin</artifactId>             <version>2.0.2</version>           </plugin>           <plugin>             <artifactId>maven-dependency-plugin</artifactId>             <version>2.0</version>           </plugin>           <plugin>             <artifactId>maven-deploy-plugin</artifactId>             <version>2.3</version>           </plugin>           <plugin>             <artifactId>maven-ear-plugin</artifactId>             <version>2.3.1</version>           </plugin>           <plugin>             <artifactId>maven-ejb-plugin</artifactId>             <version>2.1</version>           </plugin>           <plugin>             <artifactId>maven-install-plugin</artifactId>             <version>2.2</version>           </plugin>           <plugin>             <artifactId>maven-jar-plugin</artifactId>             <version>2.2</version>           </plugin>           <plugin>             <artifactId>maven-javadoc-plugin</artifactId>             <version>2.4</version>           </plugin>           <plugin>             <artifactId>maven-plugin-plugin</artifactId>             <version>2.4.1</version>           </plugin>           <plugin>             <artifactId>maven-rar-plugin</artifactId>             <version>2.2</version>           </plugin>           <plugin>                            <artifactId>maven-release-plugin</artifactId>             <version>2.0-beta-7</version>           </plugin>           <plugin>                            <artifactId>maven-resources-plugin</artifactId>             <version>2.2</version>           </plugin>           <plugin>             <artifactId>maven-site-plugin</artifactId>             <version>2.0-beta-6</version>           </plugin>           <plugin>             <artifactId>maven-source-plugin</artifactId>             <version>2.0.4</version>           </plugin>                    <plugin>              <artifactId>maven-surefire-plugin</artifactId>              <version>2.4.2</version>           </plugin>           <plugin>             <artifactId>maven-war-plugin</artifactId>             <version>2.1-alpha-1</version>           </plugin>         </plugins>       </pluginManagement>    </build>    <reporting>      <outputDirectory>target/site</outputDirectory>    </reporting>    <profiles>      <profile>        <id>release-profile</id>        <activation>          <property>            <name>performRelease</name>            <value>true</value>          </property>        </activation>        <build>          <plugins>            <plugin>              <inherited>true</inherited>              <groupId>org.apache.maven.plugins</groupId>              <artifactId>maven-source-plugin</artifactId>              <executions>                <execution>                  <id>attach-sources</id>                  <goals>                    <goal>jar</goal>                  </goals>                </execution>              </executions>            </plugin>            <plugin>              <inherited>true</inherited>              <groupId>org.apache.maven.plugins</groupId>              <artifactId>maven-javadoc-plugin</artifactId>              <executions>                <execution>                  <id>attach-javadocs</id>                  <goals>                    <goal>jar</goal>                  </goals>                </execution>              </executions>            </plugin>            <plugin>              <inherited>true</inherited>              <groupId>org.apache.maven.plugins</groupId>              <artifactId>maven-deploy-plugin</artifactId>              <configuration>                <updateReleaseInfo>true</updateReleaseInfo>              </configuration>            </plugin>          </plugins>        </build>      </profile>    </profiles>  </project>  

可以通过下面命令查看当前pom.xml受到超pom.xml文件的影响:
mvn help:effective-pom

c)聚合关系:用于将多个maven项目聚合为一个大的项目。

<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/maven-v4_0_0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>org.codehaus.mojo</groupId>    <artifactId>my-parent</artifactId>    <version>2.0</version>    <modules>      <module>my-project<module>    </modules>  </project>  

3、属性

 

maven的属性,是值的占位符,类似EL,类似ant的属性,比如${X},可用于pom文件任何赋值的位置。有以下分类:

 

  1. env.X:操作系统环境变量,比如${env.PATH}
  2. project.x:pom文件中的属性,比如:<project><version>1.0</version></project>,引用方式:${project.version}
  3. settings.x:settings.xml文件中的属性,比如:<settings><offline>false</offline></settings>,引用方式:${settings.offline}
  4. Java System Properties:java.lang.System.getProperties()中的属性,比如java.home,引用方式:${java.home}
  5. 自定义:在pom文件中可以:<properties><installDir>c:/apps/cargo-installs</installDir></properties>,引用方式:${installDir}

4、构建设置

构建有两种build标签:

<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/maven-v4_0_0.xsd"><!– "Project Build" contains more elements than just the BaseBuild set –>    <build></build>    <profiles>      <profile>        <!– "Profile Build" contains a subset of "Project Build"s elements –>        <build></build>      </profile>    </profiles>  </project>  

build中的主要标签:Resources和Plugins。

Resources:用于排除或包含某些资源文件

<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>  

Plugins:设置构建的插件

<build><plugins>       <plugin>         <groupId>org.apache.maven.plugins</groupId>         <artifactId>maven-jar-plugin</artifactId>         <version>2.0</version>         <extensions>false</extensions>         <inherited>true</inherited>         <configuration>           <classifier>test</classifier>         </configuration>         <dependencies></dependencies>         <executions></executions>       </plugin>  

 

pom.xml