maven pom.xml具体解释(整理)「建议收藏」

大家好,又见面了,我是全栈君。

pom作为项目对象模型。

通过xml表示maven项目,使用pom.xml来实现。主要描写叙述了项目:包含配置文件。开发人员须要遵循的规则,缺陷管理系统。组织和licenses,项目的url,项目的依赖性,以及其它全部的项目相关因素。

代码语言:javascript复制 4.0.0 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 基本内容:

POM包含了全部的项目信息

groupId:项目或者组织的唯一标志。而且配置时生成路径也是由此生成,如org.myproject.mojo生成的相对路径为:/org/myproject/mojo

artifactId:项目的通用名称

version:项目的版本号

packaging:打包机制,如pom,jar,maven-plugin,ejb,war,ear,rar,par

name:用户描写叙述项目的名称,无关紧要的东西,可选

url:应该是仅仅是写明开发团队的站点,无关紧要,可选

classifer:分类

当中groupId,artifactId,version,packaging这四项组成了项目的唯一坐标。普通情况下,前面三项就能够组成项目的唯一坐标了。

POM关系:主要为依赖,继承,合成

依赖关系:

代码语言:javascript复制 junit junit 4.0 jar test true com.alibaba.china.shared alibaba.apollo.webx 2.5.0 org.slf4j.slf4j-api com.alibaba.external .... ...... 当中groupId, artifactId, version这三个组合标示依赖的详细project,并且 这个依赖project必需是maven中心包管理范围内的。假设碰上非开源包,maven支持不了这个包,那么则有有三种 方法处理:

1.本地安装这个插件install plugin

比如:mvn install:intall-file -Dfile=non-maven-proj.jar -DgroupId=som.group -DartifactId=non-maven-proj -Dversion=1

2.创建自己的repositories而且部署这个包,使用类似上面的deploy:deploy-file命令,

3.设置scope为system,而且指定系统路径。

dependency里属性介绍:

type:默觉得jar类型,经常使用的类型有:jar,ejb-client,test-jar…,可设置plugins中的extensions值为true后在添加 新的类型,

scope:是用来指定当前包的依赖范围。maven的依赖范围

optional:设置指依赖是否可选。默觉得false,即子项目默认都继承,为true,则子项目必需显示的引入,与dependencyManagement里定义的依赖类似 。

exclusions:假设X须要A,A包括B依赖,那么X能够声明不要B依赖,仅仅要在exclusions中声明exclusion.

exclusion:是将B从依赖树中删除,如上配置。alibaba.apollo.webx不想使用com.alibaba.external ,可是alibaba.apollo.webx是集成了com.alibaba.external,r所以就须要排除掉.

假设一个project是parent或者aggregation(即mutil-module的)的。那么必须在packing赋值为pom,childproject从parent继承的包含:dependencies,developers,contributors,plugin lists,reports lists,plugin execution with matching ids,plugin configuration

parent的用法例如以下:

代码语言:javascript复制 org.codehaus.mojo my-parent 2.0 ../my-parent relativePath是可选的,maven会首先搜索这个地址,在搜索本地远程repositories之前.

dependencyManagement:是用于帮助管理chidren的dependencies的。

比如假设parent使用dependencyManagement定义了一个dependencyon junit:junit4.0,那么 它的children就能够仅仅引用 groupId和artifactId,而version就能够通过parent来设置,这种优点就是能够集中管理 依赖的详情

modules:对于多模块的project,outer-module没有必需考虑inner-module的dependencies,当列出modules的时候。modules的顺序是不重要的。由于maven会自己主动依据依赖关系来拓扑排序,

modules样例例如以下 :

代码语言:javascript复制my-projectother-project properties:是为pom定义一些常量。在pom中的其他地方能够直接引用。

定义方式例如以下:

代码语言:javascript复制 UTF-8 1.5 1.5 使用方式 例如以下 :

${file.encoding}

还能够使用project.xx引用pom里定义的其他属性:如$(project.version}

build设置:

defaultGoal:默认的目标,必须跟命令行上的參数同样。如:jar:jar,或者与时期parse同样,比如install

directory:指定build target目标的文件夹。默觉得$(basedir}/target,即项目根文件夹下的target

finalName:指定去掉后缀的project名字,比如:默觉得{artifactId}-{version}

filters:用于定义指定filter属性的位置。比如filter元素赋值filters/filter1.properties,那么这个文件中面就能够定义name=value对,这个name=value对的值就能够在projectpom中通过{name}引用,默认的filter文件夹是{basedir}/src/main/fiters/

resources:描写叙述project中资源的位置

代码语言:javascript复制 META-INF/plexus false ${basedir}/src/main/plexus configuration.xml **/*.properties targetPath:指定build资源到哪个文件夹。默认是base directory

filtering:指定是否将filter文件(即上面说的filters里定义的*.property文件)的变量值在这个resource文件有效,比如上面就指定那些变量值在configuration文件无效。

directory:指定属性文件的文件夹。build的过程须要找到它。而且将其放到targetPath下,默认的directory是${basedir}/src/main/resources

includes:指定包括文件的patterns,符合样式而且在directory文件夹下的文件将会包括进project的资源文件。

excludes:指定不包括在内的patterns,假设inclues与excludes有冲突,那么excludes胜利。那些符合冲突的样式的文件是不会包括进来的。

testResources:这个模块包括測试资源元素。其内容定义与resources类似,不同的一点是默认的測试资源路径是${basedir}/src/test/resources,測试资源是不部署的。

plugins配置:

代码语言:javascript复制 org.apache.maven.plugins maven-jar-plugin 2.0 false true test ... ... extensions:true or false, 决定是否要load这个plugin的extensions,默觉得true.

inherited:是否让子pom继承,ture or false 默觉得true.

configuration:通经常使用于私有不开源的plugin,不可以具体了解plugin的内部工作原理,但使plugin满足的properties

dependencies:与pom基础的dependencies的结构和功能都同样,仅仅是plugin的dependencies用于plugin,而pom的denpendencies用于项目本身。在plugin的dependencies主要用于改变plugin原来的dependencies。比如排除一些用不到的dependency或者改动dependency的版本号等,具体请看pom的denpendencies.

executions:plugin也有非常多个目标。每一个目标具有不同的配置。executions就是设定plugin的目标,

代码语言:javascript复制 echodir run verify false Build Dir: ${project.build.directory} id:标识符

goals:里面列出一系列的goals元素,比如上面的run goal

phase:声明goals运行的时期,比如:verify

inherited:是否传递execution到子pom里。

configuration:设置execution下列表的goals的设置,而不是plugin全部的goals的设置

pluginManagement配置:

pluginManagement的作用类似于denpendencyManagement,仅仅是denpendencyManagement是用于管理项目jar包依赖,pluginManagement是用于管理plugin。

与pom build里的plugins差别是,这里的plugin是列出来,然后让子pom来决定是否引用。

比如:

代码语言:javascript复制 org.apache.maven.plugins maven-jar-plugin 2.2 pre-process-classes compile jar pre-process 子pom引用方法:

在pom的build里的plugins引用:

代码语言:javascript复制

org.apache.maven.plugins

maven-jar-plugin

build里的directories:

代码语言:javascript复制${basedir}/src/main/java ${basedir}/src/main/scripts ${basedir}/src/test/java ${basedir}/target/classes ${basedir}/target/test-classes 这几个元素仅仅在parent build element里面定义,他们设置多种路径结构,他们并不在profile里,所以不能通过profile来改动

build 里面的Extensions:

它们是一系列build过程中要使用的产品,他们会包括在running bulid‘s classpath里面。

他们能够开启extensions,也能够通过提供条件来激活plugins。简单来讲。extensions是在build过程被激活的产品

代码语言:javascript复制

org.apache.maven.wagon

wagon-ftp

1.0-alpha-3

reporting设置:

reporting包括site生成阶段的一些元素,某些maven plugin能够生成reports而且在reporting下配置。

比如javadoc,maven site等,在reporting下配置的report plugin的方法与build差点儿一样。最不同的是build的plugin goals在executions下设置。而reporting的configures goals在reporttest。

excludeDefaults:是否排除site generator默认产生的reports

outputDirectory,默认的dir变成:${basedir}/target/site

report sets:设置execution goals,相当于build里面的executions,不同的是不可以bind a report to another phase,仅仅可以是site

代码语言:javascript复制 ... sunlink javadoc true http://java.sun.com/j2se/1.5.0/docs/api/ reporting里面的厄reportSets和build里面的executions的作用都是控制pom的不同粒度去控制build的过程,我们不单要配置plugins,还要配置那些plugins单独的goals。

很多其它项目信息:

name:项目除了artifactId外,能够定义多个名称

description: 项目描写叙述

url: 项目url

inceptionYear:创始年份

Licenses

代码语言:javascript复制

Apache 2

http://www.apache.org/licenses/LICENSE-2.0.txt

repo

A business-friendly OSS license

列出本project直接的licenses,而不要列出dependencies的licenses

配置组织信息:

代码语言:javascript复制

Codehaus Mojo

http://mojo.codehaus.org

非常多project都受到某些组织执行,这里设置基本信息

配置开发人员信息:

比如:一个开发人员能够有多个roles,properties是

代码语言:javascript复制

eric

Eric

eredmond@codehaus.org

http://eric.propellors.net

Codehaus

http://mojo.codehaus.org

architect

developer

-6

http://tinyurl.com/prv4t

环境设置:

issueManagement:bug跟踪管理系统,定义defect tracking system缺陷跟踪系统。比方有(bugzilla,testtrack,clearquest等).

比如:

代码语言:javascript复制

Bugzilla

http://127.0.0.1/bugzilla/

仓库:

Repositories:pom里面的仓库与setting.xml里的仓库功能是一样的。

基本的差别在于。pom里的仓库是个性化的。

比方一家大公司里的setting文件是公用 的。全部项目都用一个setting文件,但各个子项目却会引用不同的第三方库,所以就须要在pom里设置自己须要的仓库地址。

repositories:要成为maven2的repository artifact。必须具有pom文件在$BASE_REPO/groupId/artifactId/version/artifactId-version.pom

BASE_REPO能够是本地。也能够是远程的。repository元素就是声明那些去查找的repositories

默认的central Maven repository在http://repo1.maven.org/maven2/

代码语言:javascript复制 false always warn true never fail codehausSnapshots Codehaus Snapshots http://snapshots.maven.codehaus.org/maven2 default release和snapshots:是artifact的两种policies,pom能够选择那种政策有效。

enable:本别指定两种类型是否可用,true or false

updatePolicy:说明更新发生的频率always 或者 never 或者 daily(默认的)或者 interval:X(X是分钟数)

checksumPolicy:当Maven的部署文件到仓库中,它也部署了对应的校验和文件。您能够选择忽略。失败。或缺少或不对的校验和警告。

layout:maven1.x与maven2有不同的layout。所以能够声明为default或者是legacy(遗留方式maven1.x)。

插件仓库:

pluginRepositories:与Repositories具有类似的结构。仅仅是Repositories是dependencies的home,而这个是plugins 的home。

分发管理:

distributionManagement :管理distribution和supporting files。

downloadUrl:是其它项目为了抓取本项目的pom’s artifact而指定的url。就是说告诉pom upload的地址也就是别人能够下载的地址。

status:这里的状态不要受到我们的设置,maven会自己主动设置project的状态。有效的值:none:没有声明状态。pom默认的。converted:本project是管理员从原先的maven版本号convert到maven2的;partner:曾经叫做synched,意思是与partner repository已经进行了同步;deployed:至今为止最常常的状态,意思是制品是从maven2 instance部署的,人工在命令行deploy的就会得到这个;verified:本制品已经经过验证,也就是已经定下来了终于版。

repository:声明deploy过程中current project会怎样变成repository,说明部署到repository的信息。

代码语言:javascript复制

false

corp1

Corporate Repository

scp://repo1/maven2

default

true

propSnap

Propellors Snapshots

sftp://propellers.net/maven

legacy

id, name::唯一性的id。和可读性的name

uniqueVersion:指定是否产生一个唯一性的version number还是使用address里的当中version部分。true or false

url:说明location和transport protocol

layout:default或者legacy

profiles:pom4.0的一个新特性就是具有依据environment来改动设置的能力

它包括可选的activation(profile的触发器)和一系列的changes。比如test过程可能会指向不同的数据库(相对终于的deployment)或者不同的dependencies或者不同的repositories,而且是依据不同的JDK来改变的。那么结构例如以下:

代码语言:javascript复制

test

...

...

...

...

...

...

...

...

...

Activation:

触发这个profile的条件配置例如以下例:(仅仅须要当中一个成立就能够激活profile。假设第一个条件满足了。那么后面就不会在进行匹配。

代码语言:javascript复制

test

false

1.5

Windows XP

Windows

x86

5.1.2600

mavenVersion

2.0.3

${basedir}/file2.properties

${basedir}/file1.properties

激活profile的方法有多个:setting文件的activeProfile元素明白指定激活的profile的ID,在命令行上明白激活Profile用-P flag 參数

查看某个build会激活的profile列表能够用:mvn help:active-profiles

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115748.html原文链接:https://javaforall.cn