pom.xml简介

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.依赖关系

  • 继承
    使用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>
  • 聚合
    把若干个项目聚合到一起管理,使用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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值