RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

这里有您想知道的互联网营销解决方案
pom.xml的配置和管理-创新互联

1.pom.xml概念

POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的文件,使用XML表示,名称叫做pom.xml。作用类似ant的build.xml文件,功能更强大。该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。事实上,在Maven世界中,project可以什么都没有,甚至没有代码,但是必须包含pom.xml文件。

在平泉等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站设计、网站建设 网站设计制作定制网站建设,公司网站建设,企业网站建设,品牌网站建设,营销型网站建设,外贸网站制作,平泉网站建设费用合理。

2.基本配置

(1)

是pom.xml的根元素,包含了一些约束信息.


(2)

4.0.0

pom的版本,这是Maven 2&3唯一支持的pom版本,而且不能忽略.

(3)Maven坐标

,标识了仓库中的一个特定位置,叫项目坐标.三个属性告诉了Maven项目中的一个特定版本,让Maven知道如何处理它们以及在生命周期内的哪一阶段需要它们.

A.

表示项目所属的组,通常是一个公司或者组织的名称,如org.springframework.

B.

表示项目的唯一标识.

C.

表示项目的版本号,通常来说项目的版本号分成三段:
主版本号.次版本号.修订版本号

  • 主版本号:代表架构变动或者不兼容的实现.
  • 次版本号:兼容性修改,功能增强.
  • 修订版本号:bug修复.

版本号的后缀意味着项目的不同阶段:

  • SNAPSHOT:开发中的版本
  • RELEASE:正式发布版
  • M1,M2:M指里程碑,表示即将发布
  • RC:Release Candidate,发布候选
  • GA:General Availablity,基本可用版本

(4)

打包类型,没有提供的话默认值为jar,常见的有jar与war,也可以取值:

  • maven-plugin
  • pom
  • ejb
  • ear
  • rar

(5)POM 关系

Maven的一个强大之处是处理项目关系的方式,可以通过一个公共的本地仓库去解决问题.

A.依赖

POM的基础就是依赖列表,Maven下载与在编译时链接依赖与其他所需要的目标,而且可以处理传递性依赖,使列表可以专注于项目所需的依赖.依赖放在里面,包含若干个.


   
     ....
   
   
     ....
   

一个通常包含:

a.

对应项目坐标

b.

版本

c.

可用于配置不同jdk的,比如让一个同时支持jdk8与jdk11,可以选择使用哪一个,方便在不同jdk中使用.

d.

对应的依赖类型,默认为jar,通常对应与.

e.

scope表示类库与项目的关系,可以取以下5个值:

  • compile:默认值,编译依赖使其在所有类路径中可用,而且这些依赖项会传递到其他依赖项目,在编译和打包时都需要此类库.
  • provided:类似compile,但是期望JDK或一个容器会在运行时提供,仅在编译和测试类路径上可用,不可传递.
  • runtime:在运行时与测试类路径中可用,在编译类路径中不可用.
  • test:测试编译与执行阶段可用,不可传递.
  • system:类似于provided,但必须显式提供jar包.
f.

为system才需要这个,否则(当不为system时)会构建失败.路径必须为绝对路径.

g.

标记依赖的可选状态.

h.

排除不需要的依赖,包含子元素,每个都包含.

B.继承

使用指定需要继承的pom.


   org.springframework.boot
   spring-boot-starter-parent
   2.2.1.RELEASE

子pom会继承父pom的,,等众多属性,具体包括:

  • groupId
  • version
  • description
  • url
  • inceptionYear
  • organization
  • licenses
  • developers
  • contributors
  • mailingLists
  • scm
  • issueManagement
  • ciManagement
  • properties
  • dependencyManagement
  • dependencies
  • repositories
  • pluginRepositories
  • build
  • reporting
  • profiles

但不能继承:

  • artifactId
  • name
  • prerequisites

另外,就像java中所有类都继承于java.lang.Object一样,所有POM都有一个"Super POM",pom都从它继承而来,下面是Maven3.5.4的"Super pom":


  4.0.0

  
   
    central
    Central Repository
    https://repo.maven.apache.org/maven2
    default
    
     false
    
   
  

  
   
    central
    Central Repository
    https://repo.maven.apache.org/maven2
    default
    
     false
    
    
     never
    
   
  

  
   ${project.basedir}/target
   ${project.build.directory}/classes
   ${project.artifactId}-${project.version}
   ${project.build.directory}/test-classes
   ${project.basedir}/src/main/java
   ${project.basedir}/src/main/scripts
   ${project.basedir}/src/test/java
   
    
     ${project.basedir}/src/main/resources
    
   
   
    
     ${project.basedir}/src/test/resources
    
   
   
    
    
    
     
      maven-antrun-plugin
      1.3
     
     
      maven-assembly-plugin
      2.2-beta-5
     
     
      maven-dependency-plugin
      2.8
     
     
      maven-release-plugin
      2.5.3
     
    
   
  

  
   ${project.build.directory}/site
  

  
   
   
    release-profile

    
     
      performRelease
      true
     
    

    
     
      
       true
       maven-source-plugin
       
        
         attach-sources
         
          jar-no-fork
         
        
       
      
      
       true
       maven-javadoc-plugin
       
        
         attach-javadocs
         
          jar
         
        
       
      
      
       true
       maven-deploy-plugin
       
        true
       
      
     
    
   
  

C.聚合(或多模块)

模块是pom列出的项目,并作为一个组执行,每个模块通过pom文件或项目的相对路径进行列出.


   my-project
   another-project
   third-project/pom-example.xml

不需要考虑模块间的依赖关系,Maven会对其进行拓扑排序以便在依赖模块之前构建依赖关系.

(6)属性

属性是Maven中的值占位符,像Ant一样,可以以

${x}

这样的形式在pom.xml的任何位置访问一个值,也可以被用作默认值使用.
有5种形式使用值:

①env.x

env会使用当前shell的环境变量的值.
例如

${env.PATH}

②project.x

下的x元素的值,如

${project.version}

③settings.x

使用settings.xml中的元素的值

${settings.offline}

④java.x

java系统属性值,通过java.lang.System.getProperties()获取,如

${java.home}

⑤x

直接使用x,用的是下的属性,比如


   AAAAA
${aaa}

3.构建配置

,声明项目结构,管理插件等.

(1)BaseBuild元素

A.

目标的默认值,可以取值install,copile

B.

构建产生的文件存放目录

C.

构建最终产生的项目名字,但有可能会被更改.

D.

定义一组,内是.properties文件,项目中的占位符如xxx.xxx会被.properties中的xxx=xxx的具体值替换掉.

(2)资源

,项目相关的资源文件的位置.

A.

描述每个资源的根元素.

B.

构建资源的位置,对于jar包放在META-INF里面.

C.

取值true或false,表示是否开启过滤

D.

资源位置.

E.

指定要包含的资源,使用*作为通配符.

F.

与include相反,要排除的资源列表.

(3)插件

下包含了若干个,表示插件,每个有以下元素:

A.

与上面的一样.

B.

与上面的一样.

C.

取值true或false,表示是否加载扩展,默认为false.

D.

取值ture或false,是否应用pom的继承关系,默认true.

E.

插件项的相关配置,可以配置,,等.

F.

引入插件的依赖,与前面的类似.

G.

插件可能有多个目标,配置每一个作为插件的目标,在中,用指定执行目标的标识符,用指定目标,包含一组,用于指定阶段,用于指定是否启用继承关系.另外也可以包含,与上面类似,用于配置特定的目标,而不是插件的所有目标.

(4)插件管理

,包含一组,继承于此项目的子项目都可以使用,子项目可以覆盖修改.

(5)目录

可以为pom设置各种目录,比如

A.项目源码目录

构建项目时会编译该目录的源码,是相对于pom.xml的相对路径.

B.测试源码目录

测试时会编译其中的源码,也是相对于pom.xml的相对路径.

C.class目录

这里存放被编译过的class文件.

D.测试class

存放测试文件编译后的class文件.

(6)扩展

,将包含在运行中的构建的类路径中,在构建过程中可以激活扩展.比如可以为,例如这是支持ftp的wagon-ftp插件:


   
     
       org.apache.maven.wagon
       wagon-ftp
       3.3.4
     
   

(7)报表

,描述产生报表的规范等,执行"mvn site"时报表就会运行.

A.

是否包含默认报表.

B.

报表存放位置.

C.

报表包含的插件以及配置.

D.

包含一组,与类似,配置多个目标,每个包含,,,以及,指定报表集合的标识符,表示使用的报表配置,表示是否继承到子pom,包含一组,表示使用哪些报表.

4.项目信息

(1)许可证

,包含一组,每个包含,,,.

A.

名称.

B.

官方license页面的url.

C.

项目分发的方式,可以选择

  • repo:从Maven仓库下载.
  • manual:手动安装.

D.

一些补充信息.

(2)组织

,包含,,与的类似.

(3)开发者

,包含一组,每个包含:

A.

开发者id.

B.

姓名.

C.

邮箱.

D.

主页url.

E.

所属组织.

F.

所属组织的主页url.

G.

角色,包含一组,一个描述一个角色.

H.

时区,可以以America/New_York或Europe/Berlin这样的形式,或者设置一个整数,范围[-11,12].

I.

开发者属性,如如何处理即时消息等.

(4)贡献者

,包含一组,类似于,包含,等元素.

5.环境配置

(1)问题管理

,定义缺陷跟踪系统,如Bugzilla,TestTrack,ClearQuest等,包含元素,指定系统名字,指定问题管理系统的url.

(2)持续集成管理

,使用了触发器,包含了:

A.

持续集成系统的名称.

B.

持续集成系统的url.

C.

包含一组,用来配置触发器,每个包含:

a.

如何发送通知,比如可以取值mail.

b.

取值true/false,错误时发送.

c.

取值true/false,失败时发送.

d.

取值true/false,成功时发送.

e.

取值true/false,发生警告时发送.

f.

相关配置,例如可以添加

,发送的地址.

(3)邮件列表

,包含一组,表示邮件信息,包括:

A.

邮件名称.

B.

订阅邮件地址或链接.

C.

取消订阅邮件或链接.

D.

要发送的邮件地址.

E.

查看旧的邮件的url.

(4)软件配置管理(SCM)

,也叫Source Code/Control Management,允许配置代码库供web站点和其他插件使用.包含:

A.

描述如何通过Maven连接到版本控制系统,其中connection需要读权限,developConnection需要写权限.

B.

代码标签,默认为HEAD.

C.

公开的可浏览的仓库,例如ViewVC或Fisheye.

(5)前提条件

,这是Maven2中的元素,只有一个子元素,指定maven的版本,且规定是2.x版本.Maven3中不需要了,可以用:


   
     
       org.apache.maven.plugins
       maven-enforcer-plugin
       3.0.0-M3
       
         
         enforce-maven
         
           enforce
         
         
         
           
             3.0
           
            
       
     
    
   
  

代替.

(6)仓库

,包含一组,表示仓库的位置,每个包含:

A.

如何处理远征仓库的发布版本,包含:


  • true/false,是否启用.

  • 更新频率,Maven将本地pom的时间戳与远程进行比较,可以选择:always,daily(默认),interval:X(X是一个整数,表示X分钟),never.

  • 校验错误或校验失败时的策略,可以选择ignore,fail或warn.

B.

如何处理远程仓库的快照版本,包含的元素与一样.

C.

远程仓库的标识符.

D.

远程仓库的名称.

E.

远程仓库的url.

F.

仓库布局类型,可以是default或legacy,Maven2.x为仓库提供了默认布局.

(7)插件仓库

,插件的远程仓库列表,包含一组,与中的类似.

(8)分发管理

,管理整个构建过程中的分发,可以把网站部署到远程服务器或者把构件部署到远程仓库.包含:

A.仓库

,仓库信息,包含:

  • :唯一版本,取值true/false,表示是否生成一个唯一版本号或是使用部分地址作为版本号.
  • :仓库名字.
  • :仓库id.
  • :指定仓库位置.
  • :布局,取值default或legacy.

还有一个叫的元素,与类似,表示快照仓库.

B.站点部署

,定义了如何部署项目的站点与文档.包含:

  • :站点名称.
  • :站点id.
  • :站点url.

C.重定位

,表示项目的新位置.包含:

  • :新的.
  • :新的.
  • :新版本.
  • :提示信息.

(9)配置文件

,包含一组,每个可以定义不同的配置,包含的元素有:

  • :配置文件的id,比如测试的可以叫test.
  • :相关构建信息.
  • :模块信息.
  • :远程仓库信息.
  • :插件仓库信息.
  • :依赖信息.
  • :报表信息.
  • :依赖管理信息.
  • :分发管理
  • :activation是profile的关键,profile的强大之处是某些情况下才可以修改基本pom,这些情况通过activation指定.

包含以下元素:

A.

是否默认激活,true或false.

B.

指定jdk版本.

C.

可以定义一些特定的操作系统属性,例如,,,.

D.

若Maven检测到该属性就会激活该属性所在的配置文件,可以指定.

E.

两个子元素,表示若存在元素中对应的文件,则激活此配置文件.表示若不存在元素中对应的文件,则激活此配置文件.

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前名称:pom.xml的配置和管理-创新互联
文章URL:http://lswzjz.com/article/jcsoj.html