Maven POM

  • POM

    POM代表项目对象模型。它是Maven中的基本工作单元。这是一个XML文件,作为pom.xml驻留在项目的基本目录中。POM包含有关项目的信息以及Maven用于构建项目的各种配置详细信息。POM还包含目标和插件。在执行任务或目标时,Maven在当前目录中查找POM。它读取POM,获取所需的配置信息,然后执行目标。可以在POM中指定的一些配置如下
    • project dependencies(项目依赖)
    • plugins(插件)
    • goals(目标)
    • build profiles(构建配置文件)
    • project version(项目版本)
    • developers(开发者)
    • mailing list(邮件列表)
    在创建POM之前,我们应该首先确定项目组(groupId),名称(artifactId)和版本,因为这些属性有助于唯一地标识存储库中的项目。
  • 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.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文件。
    • 所有POM文件都需要project元素和三个必填字段:groupIdartifactIdversion
    • 存储库中的项目符号为groupId:artifactId:version。
    • 对POM的最低要求::
    节点 描述
    project 这是项目根标签。您需要指定基本架构设置,例如apache架构和w3.org规范。
    modelVersion 模型版本应为4.0.0。
    groupId 这是项目组的ID。这在组织或项目中通常是唯一的。例如,一个银行组com.company.bank具有所有与银行相关的项目。
    artifactId 这是项目的ID。这通常是项目的名称。例如,consumer-banking。与groupId一起,artifactId定义了工件在存储库中的位置。
    version 这是项目的版本。它与groupId一起在工件的存储库中使用,以将版本彼此分开。例如-
    • com.company.bank:consumer-banking:1.0
    • com.company.bank:consumer-banking:1.1。
  • 超级POM

    超级POM是Maven的默认POM。所有POM都从父项或默认项继承(尽管已明确定义)。此基本POM称为超级POM,它包含默认继承的值。Maven使用有效的POM(超级pom的配置加上项目配置)来执行相关目标。它有助于开发人员在其pom.xml中指定最低配置详细信息。尽管可以轻松地覆盖配置。查看超级POM的默认配置的一种简单方法是运行以下命令:mvn help:effective-pom在计算机上的任何目录中创建pom.xml。使用上述示例pom的内容。在下面的示例中,我们在C:\MVN\project文件夹中创建了pom.xml。现在打开命令控制台,转到包含pom.xml的文件夹并执行以下mvn命令。
    
    C:\MVN\project>mvn help:effective-pom        
    
    Maven将开始处理并显示有效pom。
    
    [INFO] Scanning for projects...
    [INFO] Searching repository for plugin with prefix: 'help'.
    [INFO] ------------------------------------------------------------------------
    [INFO] Building Unnamed - com.companyname.project-group:project-name:jar:1.0
    [INFO]    task-segment: [help:effective-pom] (aggregator-style)
    [INFO] ------------------------------------------------------------------------
    [INFO] [help:effective-pom {execution: default-cli}]
    [INFO]
    
    .....
    
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESSFUL
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: < 1 second
    [INFO] Finished at: Thu Jul 05 11:41:51 IST 2012
    [INFO] Final Memory: 6M/15M
    [INFO] ------------------------------------------------------------------------
    
    应用继承,插值和配置文件后,结果POM作为有效结果显示在控制台中。
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- ============================================== -->
    <!-- -->
    <!-- Generated by Maven Help Plugin on 2015-04-09T11:41:51 -->
    <!-- See: http://maven.apache.org/plugins/maven-help-plugin/ -->
    <!-- -->
    <!-- ==============================================-->
    
    <!-- ==============================================-->
    <!-- -->
    <!-- Effective POM for project -->
    <!-- 'com.companyname.project-group:project-name:jar:1.0' -->
    <!-- -->
    <!-- ============================================== -->
    
    <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>
       <build>
          <sourceDirectory>C:\MVN\project\src\main\java</sourceDirectory>
          <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
    
          <testSourceDirectory>C:\MVN\project\src\test\java</testSourceDirectory>
          <outputDirectory>C:\MVN\project\target\classes</outputDirectory>
          <testOutputDirectory>C:\MVN\project\target\test-classes</testOutputDirectory>
          <resources>
             <resource>
                <mergeId>resource-0</mergeId>
                <directory>C:\MVN\project\src\main\resources</directory>
             </resource>
          </resources>
          <testResources>
             <testResource>
                <mergeId>resource-1</mergeId>
                <directory>C:\MVN\project\src\test\resources</directory>
             </testResource>
          </testResources>
          <directory>C:\MVN\project\target</directory>
          <finalName>project-1.0</finalName>
       
          <pluginManagement>
             <plugins>
                <plugin>
                   <artifactId>maven-antrun-plugin</artifactId>
                   <version>1.3</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.4</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.5</version>
                </plugin>
                <plugin>
                   <artifactId>maven-plugin-plugin</artifactId>
                   <version>2.4.3</version>
                </plugin>
             
                <plugin>
                   <artifactId>maven-rar-plugin</artifactId>
                   <version>2.2</version>
                </plugin>
                <plugin>
                   <artifactId>maven-release-plugin</artifactId>
                   <version>2.0-beta-8</version>
                </plugin>
                <plugin>
                   <artifactId>maven-resources-plugin</artifactId>
                   <version>2.3</version>
                </plugin>
             
                <plugin>
                   <artifactId>maven-site-plugin</artifactId>
                   <version>2.0-beta-7</version>
                </plugin>
                <plugin>
                   <artifactId>maven-source-plugin</artifactId>
                   <version>2.0.4</version>
                </plugin>
                <plugin>
                   <artifactId>maven-surefire-plugin</artifactId>
                   <version>2.4.3</version>
                </plugin>
                <plugin>
                   <artifactId>maven-war-plugin</artifactId>
                   <version>2.1-alpha-2</version>
                </plugin>
             </plugins>
          </pluginManagement>
       
          <plugins>
             <plugin>
                <artifactId>maven-help-plugin</artifactId>
                <version>2.1.1</version>
             </plugin>
          </plugins>
       </build>
       
       <repositories>
          <repository>
             <snapshots>
                <enabled>false</enabled>
             </snapshots>
             <id>central</id>
             <name>Maven Repository Switchboard</name>
             <url>http://repo1.maven.org/maven2</url>
          </repository>
       </repositories>
       <pluginRepositories>
          <pluginRepository>
             <releases>
                <updatePolicy>never</updatePolicy>
             </releases>
             <snapshots>
                <enabled>false</enabled>
             </snapshots>
             <id>central</id>
             <name>Maven Plugin Repository</name>
             <url>http://repo1.maven.org/maven2</url>
          </pluginRepository>
       </pluginRepositories>
       <reporting>
          <outputDirectory>C:\MVN\project\target/site</outputDirectory>
       </reporting>
    </project>
    
    在上面的pom.xml中,您可以看到默认的项目源文件夹结构,输出目录,所需的插件,存储库,报告目录,Maven在执行所需目标时将使用它们。也不需要手动编写Maven pom.xml。Maven提供了许多原型插件来创建项目,这些插件依次创建项目结构和pom.xml。