Maven配置详解

二、pom文件节点

pom.xml文件的节点大致可以分为以下几个部分:


    4.0.0

    
    ...
    ...
    ...
    ...

    
    ...
    ...
    ...
    ...
    ...

    
    ...
    ...

    
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...

    
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...

接下来,我们就这几个部分进行挨个学习。

1. 基础配置信息


   
   4.0.0
   
   com.company.bank
   
   parent
   
   0.0.1-SNAPSHOT
   
   war

pom.xml文件中,最外层的标签是project标签,该标签定义了如下属性:

  1. xmlns属性:表明了该标签下元素的默认命名空间是:http://maven.apache.org/POM/4.0.0,xml文件中,定义命名空间的格式为:xmlns:namespace-prefix="namespaceURI",而定义默认命名空间的格式为:xmlns="namespaceURI";
  2. xmlns:xsi属性:定义了一个namespace-prefix,其代表的命名空间URI为:http://www.w3.org/2001/XMLSchema-instance,定义该命名空间主要是为了更方便的使用其所代表的命名空间中的schemaLocation属性;其中,使用xsi作为namespace-prefix,并不是硬性规定,只是一种通用的选择,当然也可以改成别的命名;
  3. xsi:schemaLocation属性:该属性的使用格式为:xsi:schemaLocation="namespaceURI1 schemaURI1 namespaceURI2 schemaURI2 ...",这里是说使用schemaURI1所对应的schema文件,校验命名空间namespaceURI1下的元素是否符合XML语法规范,后面的则是以此类推。

再来看一下基础信息的几个节点:

节点 对应的解释
modelVersion pom模型版本,根据官方文档,Maven2和3只能为4.0.0
groupId 项目组id,表明该项目所属的组织或公司,命名规则通常为组织或公司域名反转,然后再加项目名称
artifactId 项目的id,有时候和项目名保持一致,有时候是项目名 + 模块名,该id是唯一的,一个goupId下面可能会有多个artifactId,就是通过artifactId区分。比如:consumer-banking
version 当前项目的版本号,一般是:大版本.小版本.增量版本-限定版本号SHAPSHOT意为快照,说明该项目还处于开发中
packaging 项目的打包方式,常用可选值:pom, jar, ejb, maven-plugin, war, ear, rar, par等,默认方式为jar

2. 项目信息

下面再来看下项目的一些信息:

节点 对应的解释
name 声明了一个对于用户更加友好的项目名称,非必须项,一般用于Maven生成的文档
description 项目的详细描述信息,能使用HTML格式描述时不建议使用纯文本来描述, 一般用于Maven生成的文档
url 项目主页的url,一般用于Maven生成的文档
inceptionYear 项目开始的年份,一般是4位数字,涉及到介绍情况时用作提供版权信息
licenses 当前项目所有的许可文件,每一个许可文件用一个许可元素来描述,然后描述额外的元素。 通常只列出适用于这个项目的许可文件,无需列出依赖项目的 许可文件列表。如果列出多个license,那么用户可以选择其中所需的,而不是接受所有的许可文件。
organization 组织相关信息
developers 项目开发人员列表
contributors 项目其他贡献者列表,同developers

licenses列表:

    
        
    ...     
        
    ....
        
    repo     
        
    ....     

organization属性:


    
    ...
    
    ...

developers属性:

  
    
      
        
        ....  
        
        ...  
        
        ...  
        
        ...
        
          
            Java Dev  
            Web UI  
         
         
        sun  
        
        ...  
        
        
        
         
         
        -5  
      

contributors属性:


    
        ...
    

3. 依赖配置

  1. dependencies:项目相关依赖,如果父项目中的依赖,会被子项目引用,所以一般在父项目中定义子项目中共有的依赖。并且如果有需要,子项目可以修改所依赖包的版本:

    
            junit
            junit
            4.12
    

  1. parent:用于确定父项目的坐标位置。

    com.learnPro
    SIP-parent
    
    0.0.1-SNAPSHOT

  • groupId: 父项目的组Id标识符
  • artifactId:父项目的唯一标识符
  • relativePath:Maven首先在当前项目中找父项目的pom,然后在文件系统的这个位置(relativePath)查找,然后在本地仓库查找,再在远程仓库找。
  • version:父项目的版本
  1. dependencyManagement:用于帮助管理children的依赖。例如如果parent使用dependencyManagement定义了一个junit:junit4.0,那么它的children就可以只引用 groupId和artifactId,而version就可以直接使用父模块的,如果有需要,我们也可以设置version,这样的好处就是可以集中管理依赖的详情,并且也更灵活。
      不过dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。配置同dependencies类似;


    
        
            junit
            junit
            4.12
            test
        
    



    junit
    junit

dependencies几个重要的属性介绍:

  1. type属性,默认为jar,指定pom,可以定义整个pom文件;
  2. scope属性,当前包的依赖范围,用于限制依赖项的传递性,通过控制依赖的范围,可以指定该依赖在什么阶段有效。该属性共有5个值,默认是compile,也就是依赖关系在包含编译,测试,运行的所有类路径中都是可用的。而比如provided,则是依赖关系在编译和测试阶段的类路径中是可用的。如需查看全部,可参考:Introduction to the Dependency Mechanism -Dependency Scope
  3. optional属性,因为依赖是具有传递性的,例如 Project A 依赖于 Project B,B 依赖于 C,那么 B 对 C 的依赖关系也会传递给 A,如果我们不需要这种传递性依赖,就可以通过设置该属性的值。默认为false,即子项目默认都继承,true的话子项目必须显示的引入,与dependencyManagement里定义的依赖类似;
  4. exclusions和exclusion属性,用于移除项目依赖相关,如果项目X需要A,而A包含B依赖,那么X可以声明不要B依赖,只要在exclusions中声明exclusion,将B从依赖树中删除即可。这一般用于解决jar包冲突的问题;

    
        com.alibaba.china.shared
        alibaba.apollo.webx
        2.5.0
        
          
            org.slf4j.slf4j-api
            com.alibaba.external
          
        
    

  1. modules:Maven项目的一大特点就是以多模块著称,该标签就是用于指定当前项目所包含的模块,对该模块进行的Maven操作,会让所有子模块也进行相应的操作;

   com-a
   com-b
   com-c

  1. properties:该标签用于定义pom文件中的常量,这样,在pom文件的任何地方,都可以通过${java.version}来引用该值;

    
    3.2.6



    com.alibaba.rocketmq
    rocketmq-client
    ${rocketmq.version}

4. 构建配置

  1. 所谓的build,也就是项目构建。在构建配置的过程中,一般包含两个部分,一个是,另一个是;而在Maven的pom.xml中build又分为两种,一种被称为Project Build,也就是下的直接子元素,另一种被称为Profile Build,即是的直接子元素。Profile Build包含了基本的build元素,而Project Build还包含两个特殊的元素,即各种<...Directory>和

    
    
    
    
    
    
    
    
    
    
    
    
        
        
            
            
            
            
            
            
        
    
    
    
    
    
        
        
            
            
            
            
            
            
            
            
            
            
        
    
    
    
        
        
            
            
            
            
            
        
    
    
    
    
    
    
    
    
    
        
        
            
            
                
                
                
                
                
                
                
                
                
                
                    
                    
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                    
                
                
                
                    
                    
                        ......
                    
                
                
                
                
                
            
        
    
    
    
        
        
            
            
            
            
            
                
                    
                    
                    
                    
                    
                
            
            
                
                
                    ......
                
            
            
            
            
        
    

  1. reporting,该元素描述使用报表插件产生报表的规范。当用户执行“mvn site”,这些报表就会运行。 在页面导航栏能看到所有报表的链接。

    
    
    
    
    
    
        
        
            
            
            
            
            
            
            
            
            
            
            
            
                
                
                    
                    
                    
                    
                    
                    
                    
                    
                
            
        
    

5. 环境配置

  1. issueManagement:用于缺陷系统的跟踪与管理,比如Bugzilla, Jira等管理工具:
 
    Bugzilla 
    http://127.0.0.1/bugzilla/ 
 
  1. ciManagement:项目的持续集成信息:

    continuum
    http://127.0.0.1:8080/continuum
    
        
            mail
            true
            true
            false
            false
            
[email protected]
  1. system:持续集成系统的名字
  2. url:持续集成系统的URL
  3. notifiers:构建完成时,需要通知的开发者/用户的配置项。包括被通知者信息和通知条件(错误,失败,成功,警告)
  • type:通知方式
  • sendOnError:错误时是否通知
  • sendOnFailure:失败时是否通知
  • sendOnSuccess:成功时是否通知
  • sendOnWarning:警告时是否通知
  • address:通知发送到的地址
  • configuration:扩展项
  1. mailingLists:项目相关邮件列表:

    
      User List
      [email protected]
      [email protected]
      [email protected]
      http://127.0.0.1/user/
      
        http://base.google.com/base/1/127.0.0.1
      
    
    .....

  1. subscribe, unsubscribe: 订阅邮件(取消订阅)的地址或链接,如果是邮件地址,创建文档时,链接会被自动创建;
  2. archive:浏览邮件信息的URL;
  3. post:接收邮件的地址;
  1. SCM:(Source Control Management),该标签允许你配置你的代码库,供Maven Web站点和其他插件使用。

    scm:svn:http://127.0.0.1/svn/my-project
    scm:svn:https://127.0.0.1/svn/my-project
    HEAD
    http://127.0.0.1/websvn/my-project

  • connection, developerConnection:这两个表示我们如何连接到maven的版本库。connection只提供读,developerConnection将提供写的请求;写法如:scm:[provider]:[provider_specific],如果连接到CVS仓库,可以配置如下:
    scm:cvs:pserver:127.0.0.1:/cvs/root:my-project
  • tag:项目标签,默认HEAD
  • url:共有仓库路径
  1. prerequisites:项目构建的前提。

    2.0.6

  1. repositoriespluginRepositories,依赖和扩展的远程仓库列表;pom里面的仓库与setting.xml里的仓库功能是一样的。主要的区别在于,pom里的仓库是个性化的。比如一家大公司里的setting文件是公用 的,所有项目都用一个setting文件,但各个子项目却会引用不同的第三方库,所以就需要在pom里设置自己需要的仓库地址。而pluginRepositories,与Repositories具有类似的结构,只是Repositories是dependencies的home,而这个是plugins 的home。

    
      
        false
        always
        warn
      
      
        true
        never
        fail
      
      codehausSnapshots
      Codehaus Snapshots
      http://snapshots.maven.codehaus.org/maven2
      default
    
  
  
    ...
  
  • releases,snapshots:这是各种构件的策略,release或者snapshot,这两个集合,POM就可以根据独立仓库任意类型的依赖改变策略。如:一个人可能只激活下载snapshot用来开发。
  • enable:true或者false,决定仓库是否对于各自的类型激活(release 或者 snapshot)。
  • updatePolicy: 这个元素决定更新频率。maven将比较本地pom的时间戳(存储在仓库的maven数据文件中)和远程的。有以下选择: always, daily (默认), interval:X (x是代表分钟的整型) , never。
  • checksumPolicy:当Maven向仓库部署文件的时候,它也部署了相应的校验和文件。可选的为:ignore,fail,warn,或者不正确的校验和。
  • layout:在上面描述仓库的时候,提到他们有统一的布局。Maven 2有它仓库默认布局。然而,Maven 1.x有不同布局。使用这个元素来表明它是default还是legacy。
  1. profiles:POM 4.0的一个新特性是一个项目能够根据所构建的环境改变设置。通过profiles,我们可以指定构建的环境是开发,测试,UAT,生产等环境;

  ...
  
    
      test
      ...
      ...
      ...
      ...
      ...
      ...
      ...
      ...
      ...
    
  

我们可以通过activation标签来激活相应的profile,也就是指定要构建的默认的环境,并且可以配置各种需要的环境,并且激活profile的方式也有多种,具体参数可查看官网文档。


  ...
  
    
      test
      
        false
        1.5
        
          Windows XP
          Windows
          x86
          5.1.2600
        
        
          sparrow-type
          African
        
        
          ${basedir}/file2.properties
          ${basedir}/file1.properties
        
      
      ...
    
  

 

你可能感兴趣的:(maven)