Maven学习总结(四)——pom.xml

来源:互联网 发布:屏保制作软件 编辑:程序博客网 时间:2024/06/08 14:29
POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的文件,使用XML表示,名称叫做pom.xml。
1、总览
<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>
<!-- 基本设置 -->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<packaging>...</packaging>
<dependencies>...</dependencies>
<parent>...</parent>
<dependencyManagement>...</dependencyManagement>
<modules>...</modules>
<properties>...</properties>
<!-- 构建过程的设置 -->
<build>...</build>
<reporting>...</reporting>
<!-- 项目信息设置 -->
<name>...</name>
<description>...</description>
<url>...</url>
<inceptionYear>...</inceptionYear>
<licenses>...</licenses>
<organization>...</organization>
<developers>...</developers>
<contributors>...</contributors>
<!-- 环境设置 -->
<issueManagement>...</issueManagement>
<ciManagement>...</ciManagement>
<mailingLists>...</mailingLists>
<scm>...</scm>
<prerequisites>...</prerequisites>
<repositories>...</repositories>
<pluginRepositories>...</pluginRepositories>
<distributionManagement>...</distributionManagement>
<profiles>...</profiles>
</project>
2、参数详解(持续更新)
(1) 基本设置
groupId:项目或者组织的唯一标志,并且配置时生成的路径也是由此生成,如com.mycompany.app生成的相对路径为:/com/mycompany/app。
artifactId:项目的通用名称。
version:项目的版本。
packaging:打包的机制,如pom, jar, maven-plugin, ejb, war, ear, rar, par。
dependencies:依赖关系。
|-dependency
|-groupId
|-artifactId
|-version
|-classifier:用于区分从同一个pom编译出来的但是内容不同的同名包,例如同一个工程编译出两个
artifact,一个支持jdk1.5一个支持jdk1.4,那么就可以使用这个来命名为jdk15和jdk14来区
分,它如果出现在包名中,那么它必须跟在版本号后。还有一种情况是将一个工程的一些
次要artifact附到主要artifact中,就可以使用这个来区分,例如一个工程产生source,
javadoc,class三种东西,那么就可以使用不同的classifier来分别标识这些东西。
|-type:默认为jar,类型,常用如:jar,ejb-client,test-jar,可以设置plugins中的extensions值为true
后在增加新类型。
|-scope:用于限制相应的依赖范围,包括以下的几种变量:
compile :默认范围,用于编译
provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath
runtime:在执行时,需要使用
test:用于test任务时使用
system:需要外在提供相应得元素。通过systemPath来取得
|-systemPath:只在dependency的scope声明为system的时候才有用除,否则,build的过程将会失
败。路径必须是绝对的,所以最好使用property来声明机器的特定路径。
|-optional:设置指依赖是否可选,默认为false,即子项目默认都继承,为true,则子项目必需显示的引
入,与dependencyManagement里定义的依赖类似 。
|-exclusions:如果X需要A,A包含B依赖,那么X可以声明不要B依赖,只要在exclusions中声明
exclusion。
|-exclusion:将B从依赖树中删除。
|-groupId
|-artifactId
parent:继承结构,父项目的信息
|-groupId
|-artifactId
|-version
|-relativePath:可选的,maven会首先搜索这个地址,在搜索本地远程repositories之前
dependencyManagement:是用于帮助管理chidren的dependencies的。例如如果parent使用dependencyManagement定义了一个dependencyon
junit:junit4.0,那么 它的children就可以只引用 groupId和artifactId,而version就可以通过parent来设置,这样的好处就是可以
集中管理 依赖的详情
modules:对于多模块的project,当列出modules的时候,modules的顺序是不重要的,因为maven会自动根据依赖关系来拓扑排序。
properties:是为pom定义一些常量,在pom中的其它地方可以直接引用,如下
<properties>
       <file.encoding>UTF-8</file_encoding>
       <Java.source.version>1.5</java_source_version>
       <java.target.version>1.5</java_target_version>
</properties>
使用方式 如下 :
${file.encoding}
还可以使用project.xx引用pom里定义的其它属性:如$(project.version} 
build
|-defaultGoal:执行build任务时,如果没有指定目标,将使用的默认值,如<defaultGoal>install</defaultGoal>,在命令行中执行mvn,则相当于执行
mvn install
|-directory:build目标文件的存放目录,默认在${basedir}/target目录
|-finalName:build目标文件的文件名,默认情况下为${artifactId}-${version}
|-filters
|-filter:定义*.properties文件,包含一个properties列表,该列表会应用的支持filter的resources中。也就是说,定义在filter的文件中
的"name=value"值对会在build时代替${name}值应用到resources中。Maven的默认filter文件夹是${basedir}/src/main/filters/
|-resources
|-resource:描述与项目关联的文件是什么和在哪里
|-targetPath:指定build后的resource存放的文件夹。该路径默认是basedir。通常被打包在JAR中的resources的目标路径为META-INF
|-filtering:指定是否将filter文件(即上面说的filters里定义的*.property文件)的变量值在这个resource文件有效
|-directory:指定属性文件的目录,build的过程需要找到它,并且将其放到targetPath下,默认的directory是${basedir}/src/main/resources
|-includes
|-include:指定作为resource的文件的匹配模式,用*作为通配符
|-excludes
|-exclude:指定哪些文件被忽略,如果一个文件同时符合includes和excludes,则excludes生效
|-testResources:定义和resource类似,但只在test时使用,默认的test resource文件夹路径是${basedir}/src/test/resources,test resource不被部署
|-plugins
|-plugin
|-groupId
|-artifactId
|-version
|-extensions:true/false,是否加载plugin的extensions,默认为true
|-inherited:是否让子pom继承,ture or false 默认为true
|-configuration:配置该plugin期望得到的properies
|-dependencies:与pom基础的dependencies的结构和功能都相同,只是plugin的dependencies用于plugin,而pom的denpendencies用于项目本身
|-executions:plugin也有很多个goal,每个目标具有不同的配置,executions就是设定plugin的goal
|-id:标识符,用于和其他execution区分
|-goals
|-goal:目标,如 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来决定是否引用。
|-extensions它们是一系列build过程中要使用的产品,他们会包含在running bulid‘s classpath里面。他们可以开启extensions,也可以通过提供条件来激活plugins。简单来讲,extensions是在build过程被激活的产品
|-extension
|-groupId
|-artifactId
|-version
reportingreporting包含site生成阶段的一些元素,某些maven  plugin可以生成reports并且在repoting下配置。例如javadoc,maven site等,在reporting下配置reprot plugin的方法与build几乎一样,最不同的是:build的plug-in goals在executions下设置,而reporting的configures goals在reportset。
|-plugins
|-plugin
|-reportSets:reportSets和build里面的executions的作用都是控制pom的不同粒度去控制build的过程,我们不单要配置plugins,还要配置那些plugins单独的goals
|-reportSet
|-id
|-reports
|-report:例如javadoc
|-inherited
|-configuration
|-links
|-link
(更多的项目信息)
name:项目除了artifactId外,可以定义多个名称
description:项目描述
url:项目url
inceptionYear:创始年份
licenses:列出本工程直接的licenses,而不要列出dependencies的licenses
|-license
|-name
|-url
|-distribution
|-comments
organization:配置组织信息
|-name
|-url
developers:配置开发者信息
|-developer
|-id
|-name
|-email
|-url
|-organization
|-organizationUrl
|-roles
|-role
|-timezone
|-properties
|-picUrl
contributors跟developer差不多,只是contributors是副的工作人员,不过良好工程应该需要更多的contributors而不是developer
issueManagement:定义相关的bug跟踪系统,如bugzilla,testtrack,clearQuest等
|-system
|-url
ciManagement连续整合管理,基于triggers或者timings
|-system
|-url
|-notifiers
|-notifier
|-type
|-sendOnError
|-sendOnFailure
|-sendOnSuccess
|-sendOnWarning
|-configuration
|-address
mailingLists
|-mailingList
|-name
|-subscribe
|-unsubscribe
|-post
|-archive
|-otherArchives
|-otherArchive
scm软件配置管理,如cvs 和svn
|-connection
|-developerConnection都是连接字符串,其中后者是具有write权限的scm连接,常用的scm工具包括cvs与subversion,还有其他scms,url的字符串格式是:scm:[provider]:[provider_specific],例如cvs的是scm:cvs:pserver:127.0.0.1:/cvs/root:my-project
|-tag说明project所在的目录tag,默认是HEAD,表示根目录
|-url公开的可浏览repository
prerequisites:首要条件,如果不满足,maven会在事件开始之前失败,在pom4.0,唯一的首要条件是maven元素
repositories:repository元素就是声明那些去查找的repositories,默认的central Maven repository在http://repo1.maven.org/maven2/
|-repository
|-releases:release和snapshots:是artifact的两种policies,pom可以选择那种政策有效。
|-enabled:分别指定两种类型是否可用,true or false
|-updatePolicy:说明更新发生的频率always 或者 never 或者 daily(默认的)或者 interval:X(X是分钟数)
|-checksumPolicy:When Maven deploys files to the repository, it also deploys corresponding checksum files. Your options are to ignore, fail, or warn on missing or incorrect checksums
|-snapshots:与releases相似
|-id
|-name
|-url
|-layout:maven1.x与maven2有不同的layout,所以可以声明为default或者是legacy(遗留方式maven1.x)
pluginRepositories:与Repositories具有类似的结构,只是Repositories是dependencies的home,而这个是plugins 的home
distributionManagement:用于配置分发管理,配置相应的产品发布信息,主要用于发布,在执行mvn deploy后表示要发布的位置
|-repository
|-id
|-name
|-url
profiles:类似于settings.xml中的profiles,增加了几个元素
|-profile
|-id
|-activation:触发这个profile的条件配置(只需要其中一个成立就可以激活profile,如果第一个条件满足了,那么后面就不会在进行匹配)
|-build
|-modules
|-repositories
|-pluginRepositories
|-dependencies
|-reporting
|-dependencyManagement
|-distributionManagement
原创粉丝点击