码迷,mamicode.com
首页 > 其他好文 > 详细

Maven - 3-POM文件

时间:2017-12-04 00:51:31      阅读:322      评论:0      收藏:0      [点我收藏+]

标签:资源   数据   port   xml文件   dom   build   alpha   temp   source   

POM

POM文件是Maven项目中的核心配置和管理文件,也被称为Maven描述文件。

  • POM(Project Object Model,项目对象模型)是描述项目构建信息的XML格式文件,位于项目的根目录。
  • 统一管理项目构建的关键信息,包括:开发规范、开发工具、项目代码、测试代码、资源、依赖的包等。
  • pom之间实际上存在三种关系:继承、依赖、聚合。

官网参考信息:http://maven.apache.org/ref/3.5.0/maven-model/maven.html

解读pom.xml

  • project POM文件的根元素,包含约束信息
  • modelVersion 指定当前Maven模型的版本号,对于Maven2和Maven3只能设置为4.0.0
  • groupId 项目的全球唯一标识符(整个系统的名称),一般是域名的反写
  • artifactId 构件标识符(子模块名称),和groupId一起唯一标识一个构件,可以使用"项目名-子模块名"的命名方式
  • version 项目当前版本,格式为:主版本.次版本.增量版本-限定版本号;限定版本号可以设置为SNAPSHOT(开发),Laest(最新),Alpha(内部测试),Release(稳定),Beta(公测),GA(正式发布)等

重要:groupId、artifactId、version三个元素构成基本坐标,可以唯一标识一个Maven项目。

  • packaging 项目产生的构件类型(项目打包的类型),可以取值为jar、war、rar、ear、pom,也可以创建新类型;如果不设置,默认为jar
  • name 项目的名称, Maven产生的文档用
  • url 项目主页的URL, Maven产生的文档用
  • description 项目的详细描述, Maven 产生的文档用
  • developers 项目开发人员信息
  • licenses 许可信息
  • organization 组织信息
  • dependencies 项目相关的所有依赖(dependency 包含一个依赖包的坐标信息)
  • properties 定义配置属性,例如设置project.build.sourceEncoding为UTF-8,防止中文乱码
  • build 定义构建项目需要的信息
  • resources 描述项目相关或测试相关的所有资源路径

parent - 继承

应用在子项目中。

    <!-- 父项目的坐标。如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值。坐标包括group ID,artifact ID和 version。 --> 
    <parent> 
        <!-- 被继承的父项目的构件标识符 --> 
        <artifactId>xxx</artifactId>
        <!-- 被继承的父项目的全球唯一标识符 -->
        <groupId>xxx</groupId> 
        <!-- 被继承的父项目的版本 --> 
        <version>xxx</version>
        <!-- 父项目的pom.xml文件的相对路径。默认值是../pom.xml。Maven首先在构建当前项目的地方寻找父项目的pom,其次在文件系统的这个位置(relativePath位置),然后在本地仓库,最后在远程仓库寻找父项目的pom。 --> 
        <relativePath>xxx</relativePath> 
    </parent> 

dependencies - 依赖

官网信息:Dependency Scope
http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope

  • groupId 依赖项的groupId
  • artifactId 依赖项的artifactId
  • version 依赖项的版本
  • exclusions 排除项目中的依赖冲突时使用。
  • scope 依赖项的适用范围:
    • compile,缺省值,适用于所有阶段,会随着项目一起发布。
    • provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
    • runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
    • test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
    • system,类似provided,与本机系统相关联,可移植性差,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
    • import,导入的范围,只使用在dependencyManagement中,表示从其它的pom中导入dependecy的配置
    <!-- 该元素描述了项目相关的所有依赖。 这些依赖组成了项目构建过程中的一个个环节。它们自动从项目定义的仓库中下载。 -->         
    <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。--> 
            <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> 
            <!-- 排除依赖列表,不依赖项目的依赖。此元素主要用于解决版本冲突问题 --> 
            <exclusions> 
                <exclusion> 
                    <artifactId> spring-core </artifactId> 
                    <groupId> org.springframework </groupId> 
                </exclusion> 
            </exclusions> 
            <!-- 可选依赖,如果在项目B中声明C依赖为可选,那么需要在依赖于B的项目A中显式的引用对C的依赖。可选依赖阻断依赖的传递性。 --> 
            <optional> true </optional> 
        </dependency> 
    </dependencies> 

dependencyManagement
依赖管理。其中定义的多个依赖,并不会实际引入。
应用在父模块中,供子模块所继承使用。

<!-- 继承自该项目的所有子项目的默认依赖信息。这部分的依赖信息不会被立即解析,而是当子项目声明一个依赖(必须描述group ID和artifact ID信息),
如果group ID和artifact ID以外的一些信息没有描述,则通过group ID和artifact ID匹配到这里的依赖,并使用这里的依赖信息。 --> 
    <dependencyManagement> 
        <dependencies> 
            <!-- 参见dependencies/dependency元素 --> 
            <dependency></dependency> 
        </dependencies> 
    </dependencyManagement> 

modules - 聚合

可以通过一个大的项目来整合各个小的模块

 <!-- 模块(有时称作子项目) 被构建成项目的一部分。列出的每个模块元素是指向该模块的目录的相对路径 --> 
    <modules>
        <!--子项目相对路径-->
        <module></module>
    </modules> 

同时需要将packaging设置为pom

  <packaging>pom</packaging>

pluginManagement

Plugin的配置,应用在父项目。

    <!-- 子项目可以引用的默认插件信息。该插件配置项直到被引用时才会被解析或绑定到生命周期。给定插件的任何本地配置都会覆盖这里的配置 --> 
    <pluginManagement> 
         <!-- 使用的插件列表 。 --> 
         <plugins> 
             <!-- plugin元素包含描述插件所需要的信息。 --> 
             <plugin> 
                 <!-- 插件在仓库里的group ID --> 
                 <groupId></groupId> 
                 <!-- 插件在仓库里的artifact ID --> 
                 <artifactId></artifactId> 
                 <!-- 被使用的插件的版本(或版本范围) --> 
                 <version></version> 
                 <!-- 是否从该插件下载Maven扩展(例如打包和类型处理器),由于性能原因,只有在真需要下载时,该元素才被设置成enabled。 --> 
                 <extensions>true/false</extensions>
                
                 <!-- 在构建生命周期中执行一组目标的配置。每个目标可能有不同的配置。 --> 
                 <executions> 
                     <!-- execution元素包含了插件执行需要的信息 --> 
                     <execution> 
                         <!-- 执行目标的标识符,用于标识构建过程中的目标,或者匹配继承过程中需要合并的执行目标 --> 
                         <id></id>
                         <!-- 绑定了目标的构建生命周期阶段,如果省略,目标会被绑定到源数据里配置的默认阶段 --> 
                         <phase></phase>
                         <!-- 配置的执行目标 --> 
                         <goals></goals> 
                         <!-- 配置是否被传播到子POM --> 
                         <inherited>true/false</inherited> 
                         <!-- 作为DOM对象的配置 --> 
                         <configuration></configuration>
                     </execution> 
                 </executions> 
                 
                 <!-- 项目引入插件所需要的额外依赖 --> 
                 <dependencies>
                     <!-- 参见dependencies/dependency元素 --> 
                     <dependency></dependency> 
                 </dependencies> 

                 <!-- 任何配置是否被传播到子项目 --> 
                 <inherited>true/false</inherited>
                 <!-- 作为DOM对象的配置 --> 
                 <configuration></configuration>
             </plugin> 
         </plugins> 
     </pluginManagement> 

resources

Build时需要的资源文件

        <!-- 这个元素描述了项目相关的所有资源路径列表,例如和项目相关的属性文件,这些资源被包含在最终的打包文件里。 --> 
        <resources> 
            <!-- 这个元素描述了项目相关或测试相关的所有资源路径 --> 
            <resource> 
                <!-- 描述了资源的相对路径(相对target/classes目录)。如果只是想把资源放到源码目录结构里,就不需要该配置。 --> 
                <targetPath></targetPath> 
                <!-- 是否使用参数值代替参数名。参数值取自properties元素或者文件里配置的属性,文件在filters元素里列出。 --> 
                <filtering></filtering>
                <!-- 描述存放资源的目录,该路径相对POM路径 --> 
                <directory></directory>
                <!-- 包含的模式列表,例如**/*.xml. --> 
                <includes>
                    <include></include>
                </includes>
                <!-- 排除的模式列表,例如**/*.xml -->
                <excludes>
                    <exclude></exclude>
                </excludes>
            </resource> 
        </resources> 

Maven - 3-POM文件

标签:资源   数据   port   xml文件   dom   build   alpha   temp   source   

原文地址:http://www.cnblogs.com/anliven/p/7968069.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!