Maven项目中的pom.xml详解

2017-01-10 17:18:00    admin    655    原创
摘要:Maven项目中的pom.xml详解


什么是pom?

    pom作为项目对象模型。通过xml表示maven项目,使用pom.xml来实现。主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素。
<!--父项目的坐标。如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值。 坐标包括group ID,artifact ID和 version。-->
    <parent>
     <!--被继承的父项目的构件标识符-->
     <artifactId/>
     <!--被继承的父项目的全球唯一标识符-->
     <groupId/>
     <!--被继承的父项目的版本-->
     <version/>
     <!--父项目的pom.xml文件的相对路径。相对路径允许你选择一个不同的路径。默认值是../pom.xml。Maven首先在构建当前项目的地方寻找父项目的pom,其次在文件系统的这个位置(relativePath位置),然后在本地仓库,最后在远程仓库寻找父项目的pom。-->
     <relativePath/>
</parent>


<!--引用的默认插件信息。该插件配置项直到被引用时才会被解析或绑定到生命周期。给定插件的任何本地配置都会覆盖这里的配置-->
<buid>
<!--使用的插件列表 。-->
   <plugins>
    <!--plugin元素包含描述插件所需要的信息。-->
    <plugin>
     <!--插件在仓库里的group ID-->
     <groupId/>
     <!--插件在仓库里的artifact ID-->
     <artifactId/>
     <!--被使用的插件的版本(或版本范围)-->
     <version/>
     <!--是否从该插件下载Maven扩展(例如打包和类型处理器),由于性能原因,只有在真需要下载时,该元素才被设置成enabled。-->
     <extensions/>
     <!--在构建生命周期中执行一组目标的配置。每个目标可能有不同的配置。-->
     <executions>
      <!--execution元素包含了插件执行需要的信息-->
      <execution>
       <!--执行目标的标识符,用于标识构建过程中的目标,或者匹配继承过程中需要合并的执行目标-->
       <id/>
       <!--绑定了目标的构建生命周期阶段,如果省略,目标会被绑定到源数据里配置的默认阶段-->
       <phase/>
       <!--配置的执行目标-->
       <goals/>
       <!--配置是否被传播到子POM-->
       <inherited/>
       <!--作为DOM对象的配置-->
       <configuration/>
      </execution>
     </executions>
     <!--项目引入插件所需要的额外依赖-->
     <dependencies>
      <!--参见dependencies/dependency元素-->
      <dependency>
       ......
      </dependency>
     </dependencies>     
     <!--任何配置是否被传播到子项目-->
     <inherited/>
     <!--作为DOM对象的配置-->
     <configuration/>
    </plugin>
   </plugins>
</buid>
<!--该元素描述了项目相关的所有依赖。 这些依赖组成了项目构建过程中的一个个环节。它们自动从项目定义的仓库中下载。要获取更多信息,请看项目依赖机制。-->  
    <dependencies>  
        <dependency>
   <!--依赖的group ID-->
            <groupId>org.apache.maven</groupId>  
            <!--依赖的artifact ID-->
            <artifactId>maven-artifact</artifactId>  
            <!--依赖的版本号。 在Maven 2里, 也可以配置成版本号的范围。-->
            <version>3.8.1</version>  
            <!--依赖类型,默认类型是jar。它通常表示依赖的文件的扩展名,但也有例外。一个类型可以被映射成另外一个扩展名或分类器。类型经常和使用的打包方式对应,尽管这也有例外。一些类型的例子:jar,war,ejb-client和test-jar。如果设置extensions为 true,就可以在plugin里定义新的类型。所以前面的类型的例子不完整。-->
            <type>jar</type>
            <!--依赖的分类器。分类器可以区分属于同一个POM,但不同构建方式的构件。分类器名被附加到文件名的版本号后面。例如,如果你想要构建两个单独的构件成JAR,一个使用Java 1.4编译器,另一个使用Java 6编译器,你就可以使用分类器来生成两个单独的JAR构件。-->
            <classifier></classifier>
            <!--依赖范围。在项目发布过程中,帮助决定哪些构件被包括进来。欲知详情请参考依赖机制。 
                - compile :默认范围,用于编译   
                - provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath   
                - runtime: 在执行时需要使用   
                - test:    用于test任务时使用   
                - system: 需要外在提供相应的元素。通过systemPath来取得   
                - systemPath: 仅用于范围为system。提供相应的路径   
                - optional:   当项目自身被依赖时,标注依赖是否传递。用于连续依赖时使用-->  
            <scope>test</scope>    
            <!--仅供system范围使用。注意,不鼓励使用这个元素,并且在新的版本中该元素可能被覆盖掉。该元素为依赖规定了文件系统上的路径。需要绝对路径而不是相对路径。推荐使用属性匹配绝对路径,例如${java.home}。--> 
            <systemPath></systemPath>  
            <!--当计算传递依赖时, 从依赖构件列表里,列出被排除的依赖构件集。即告诉maven你只依赖指定的项目,不依赖项目的依赖。此元素主要用于解决版本冲突问题--> 
            <exclusions>
             <exclusion>  
                    <artifactId>spring-core</artifactId>  
                    <groupId>org.springframework</groupId>  
                </exclusion>  
            </exclusions>    
            <!--可选依赖,如果你在项目B中把C依赖声明为可选,你就需要在依赖于B的项目(例如项目A)中显式的引用对C的依赖。可选依赖阻断依赖的传递性。-->  
            <optional>true</optional>
        </dependency>
    </dependencies>


豫ICP备15006410号
蝉知 蝉知4.5.2