pom.xml详解

作者: 扒酒说 | 来源:发表于2016-07-17 12:16 被阅读1373次

    1.概念

    Project Object Model,项目对象模型,通过xml格式描述程序之间的依赖和程序管理相关信息,一般在阅读项目时需要先大致看下root模块的pom文件,便于理解程序的结构

    2.基础配置

    <modelVersion>4.0.0</modelVersion>

    描述maven版本信息,现在唯一支持maven2、maven3的版本

    <parent></parent>

    父节点,描述继承关系,如果公司涉及项目比较多的话,建议此节点抽象抽来描述,把一些共有的配置统一约定掉

    <groupId></groupId>

    组织名

    <artifactId></artifactId>

    模块名

    <version></version>

    版本

    <packaging></packaging>

    打包的格式,可以为:pom , jar , maven-plugin , ejb , war , ear , rar , par

    web模块打包为war,子模块一般描述为pom

    <dependencyManagent></dependencyManagent>

    依赖管理

    <dependencies></dependencies>

    详细依赖描述

    <modules></modules>

    模块,主要再根pom描述,因为一个项目会涉及很多模块,在实际编译的时候不可能每个模块都去mvn compile或者mvn package,直接对根模块执行mvn package ,即可完成所有模块的打包配置

    <properities></properities>

    通用配置和变量描述,一般将和子模块之间通用的一些配置变量抽象描述出来

    2.其他配置

    编译相关、项目信息、环境配置,这些配置都比较简单,看看就知道是什么意思,而且一般不会影响编译过程

    3.依赖关系

    a.继承

    使用parent节点将父节点显示描述即可,如projectB继承自projectA,那么pom文件可显示描述:

    <parent>

    <groupId>com.xavier.study<groupId>

    <artifactId>study<artifactId>

    <version>1.0.1</version>

    <relativePath>./projectA/pom.xml</relativePath>, 如果两个项目目录是同级的关系,那么此配置可省略,如果不是这种情况,需要显示的指定父节点的pom文件,不然编译会无法通过

    </parent>

    b.聚合

    把若干个项目聚合到一起管理,使用modules管理,projectA聚合到projectB:

    <modules>

    <module>./projectA</module>, 如果目录不同级,需要显示的指定目录名(是目录名,非artifactid)

    <modules>

    4.依赖

    在dependency元素中除了可以指定依赖项目的groupId、artifactId和version之外,还可以指定以下元素:

    type:对应于依赖项目的packaging类型,默认是jar

    scope:表示依赖项目的一个作用范围。

    compile:这是它的默认值,这种类型表示所有的情况都是有用的,包括编译和运行时。且这种类型的依赖性是可以传递。

    provided:和compile类似,表示期望这个依赖项目在运行时由JDK或者容器来提供。这种类型表示该依赖只有在测试和编译的情况下才有效,在运行时将由JDK或者容器提供。这种类型的依赖性是不可传递的。

    runtime:这种类型表示该依赖在编译的时候不是必须的,只有在运行的时候才是必须的。

    test:这表示这种依赖只有测试的时候才需要,正常情况下是不需要的。

    system:这种类型跟provided类似,唯一不同的就是这种类型的依赖我们要自己提供jar包,这需要与另一个元素systemPath来结合使用。systemPath将指向我们系统上的jar包的路径,而且必须是给定的绝对路径。

    systemPath:上面已经说过了这个元素是在scope的值为system的时候用于指定依赖的jar包在系统上的位置的,而且是绝对路径。该元素必须在依赖的jar包的scope为system时才能使用,否则Maven将报错。

    optional:当该项目本身作为其他项目的一个依赖时标记该依赖为可选项。假设现在projectA有一个依赖性projectB,我们把projectB这个依赖项设为optional,这表示projectB在projectA的运行时不一定会用到。这个时候如果我们有另一个项目projectC,它依赖于projectA,那么这个时候因为projectB对于projectA是可选的,所以Maven在建立projectC的时候就不会安装projectB,这个时候如果projectC确实需要使用到projectB,那么它就可以定义自己对projectB的依赖。当一个依赖是可选的时候,我们把optional元素的值设为true,否则就不设置optional元素。

    exclusions:考虑这样一种情况,我们的projectA依赖于projectB,然后projectB又依赖于projectC,但是在projectA里面我们不需要projectB依赖的projectC,那么这个时候我们就可以在依赖projectB的时候使用exclusions元素下面的exclusion排除projectC。

    相关文章

      网友评论

        本文标题:pom.xml详解

        本文链接:https://www.haomeiwen.com/subject/jheptttx.html