首页 > 技术文章 > Maven(二)pom

RobertLionLin 2019-04-18 16:04 原文

pom简介  

POM是项目对象模型(Project Object Model)的简称,pom.xml是maven项目中的文件,该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。每个Maven项目,必须包含pom.xml文件。

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>

    <!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如下,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group -->
    <groupId>com.companyname.project-group</groupId>
 
    <!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
    <artifactId>project</artifactId>
 
    <!-- 版本号 -->
    <version>1.0</version>
</project>

Pom之间的关系,继承、聚合与依赖

聚合 

如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合,即简历一个专门负责聚合的项目
  我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,在开始的时候我们可以独立的编译和测试运行每个模块,但是随着项目的不断变大和复杂化,我们期望能够使用简单的操作来完成编译等工作,这时Maven给出了聚合的配置方式。

 <modules>
        <module>模块一</module>
        <module>模块二</module>
        <module>模块三</module>
 </modules>

继承

继承为了消除重复,我们把很多相同的配置提取出来,例如:scope,version等

父模块

可以定义属性:访问属性的方式为${junit.version}

 <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <junit.version>4.9</junit.version>
</properties>

父模块用dependencyManagement进行管理:在dependencyManagement中配置的元素既不会给parent引入依赖,也不会给它的子模块引入依赖,仅仅是它的配置是可继承的,因此要在子类中配置自己需要的依赖即可。

<dependencyManagement>
      <dependencies>
      <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>${junit.version}</version>
          <scope>test</scope>
      </dependency>    
 </dependencyManagement>

子模块

<!-- 继承Parent项目中的pom.xml配置 -->
        <parent>  
           <groupId>com.lion.maven</groupId>
          <artifactId>ParentProject</artifactId>
           <version>0.0.1-SNAPSHOT</version>
           <!-- 使用相对路径 -->
         <relativePath>../ParentProject/pom.xml</relativePath>  
     </parent>
     
     <dependencies>
         <dependency>
<!-- 可以不指明<version></version>和<scope>test</scope>,会直接从Parent项目的pom.xml继承 -->
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
         </dependency>
     </dependencies>

在Maven中定义了超级pom.xml,任何没有申明自己父pom.xml的pom.xml都将默认继承自这个超级pom.xml。
  超级pom.xml中没有groupId、artifactId和version的定义,所以我们在建立自己的pom.xml的时候就需要定义这三个元素。和java里面的继承类似,子pom.xml会完全继承父pom.xml中所有的元素,而且对于相同的元素,一般子pom.xml中的会覆盖父pom.xml中的元素,但是有几个特殊的元素它们会进行合并而不是覆盖。这些特殊的元素是:
dependencies、developers、contributors、resources、plugin列表,包括plugin下面的reports

依赖

项目之间的依赖是通过pom.xml文件里面的dependencies元素下面的dependency元素进行的。一个dependency元素定义一个依赖关系。在dependency元素中我们主要通过依赖项目的groupId、artifactId和version来定义所依赖的项目。

<dependencies>  
    <dependency>  
      <groupId>junit</groupId>  
      <artifactId>junit</artifactId>  
      <version>3.8.1</version>  
      <scope>test</scope>  
      <optional>true</optional>  
    </dependency>  
  </dependencies>  

PS:scope:用于限制相应的依赖范围、传播范围。

推荐阅读