标签:
POM:Poject Object Model,项目对象模型。
项目基础信息:
modelVersion:
当前POM模型的版本。
groupId:
当前Maven项目隶属的实际项目。
artifactId:
当前Maven项目的实际项目名称。推荐使用项目名-模块名的方式。
version:
项目当前的版本。
packaging:
项目的打包方式。默认为jar。
classifier:
定义构建输出的一些附属构件。如源码、javadoc等。不能直接定义项目的classifier,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成。
artifactId-version [-classifier].packaging
name:
声明了一个对于用户更友好的项目名称。
属性配置:
properties:
${basedir}:项目根目录。
${version}:项目版本。
${project.artifactId}:对应<project><artifactId>元素的值。
${project.build.sourceDirectory}:项目的主源码目录,默认为src/main/java/。
${project.build.testSourceDirectory}:项目的测试源码目录,默认为src/test/java/。
${project.build.directory}:项目构建输出目录,默认为target/。
${project.outputDirectory}:项目主代码编译输出目录,默认为target/classes/。
${project.testOutputDirectory}:项目测试代码编译输出目录,默认为target/test-classes/。
${project.groupId}:项目的groupId。
${project.artifactId}:项目的artifactId。
properties:
property name:
用户使用以settings.开头的属性引用settings.xml文件中XML元素的值。
用户使用以env.开头的属性引用环境变量。
依赖管理:
dependencies:依赖信息。
dependency:单一依赖信息。
groupId:依赖的组ID。
artifactId:依赖的组唯一标识。
version:依赖的版本。
type:依赖的类型,对应于项目坐标定义的packaging。
scope:依赖范围。
optional:标记依赖是否可选。
exclusions:排除传递性依赖。
exclusion:排除传递性依赖。
groupId:
artifactId:
依赖范围:
用于控制依赖与classpath(编译classpath、测试classpath、运行classpath)之间的关系。
依赖范围(scope) | 对于编译classpath有效 | 对于测试classpath有效 | 对于运行classpath有效 | 例子 |
compile | Y | Y | Y | spring-core |
test | - | Y | - | JUnit |
provided | Y | Y | - | servlet-api |
runtime | - | Y | Y | JDBC驱动 |
system | Y | Y | - | Maven仓库之外的类库 |
传递性依赖:
account-email->spring-core->commons-logging
Maven会解析各个直接依赖的POM,将必要的间接依赖以传递性依赖的形式引入到当前的项目中。
compile | test | provided | runtime | |
compile | compile | - | - | runtime |
test | test | - | - | test |
provided | provided | - | provided | provided |
runtime | runtime | - | - | runtime |
当第二直接依赖的范围是compile的时候,传递性依赖的范围与第一直接依赖的范围一致;当第二直接依赖的范围是test的时候,依赖不会得以传递;当第二直接依赖的范围是provided的时候,只传递第一直接依赖范围也为provided的依赖,且传递性依赖的范围同样是provided;当第二直接依赖的范围是runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但compile例外,此时传递性依赖的范围为润time。
依赖调解:
可选依赖:
项目的传递依赖中,可选依赖不会对项目产生任何影响。在理想的情况下,是不应该使用可选依赖的。
排除依赖:
显式的排除传递性依赖,而后手动指定依赖。Maven解析后的依赖中,不可能出现groupId和artifactId相同但是version不同的两个依赖。
归类依赖:
使用properties定义属性,而后使用${}进行引用。
依赖解析机制:
RELEASE:最新发布版本,不包括快照版本。
LATEST:最新版本,包括快照版本。
聚合:
将多个Maven项目或模块组合成一个项目,以便进行统一的构建。
<packaging>pom</packaging>
<modules>
<module>{相对于当前POM的目录}</module>
</modules>
继承:
消除重复配置。
<parent>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<relativePath>{默认值为../pom.xml}</relativePath>
</parent>
可继承的元素:
依赖管理:
让子模块继承到父模块的依赖配置,同时保证子模块依赖使用的灵活性。
反应堆:
所有模块组成的一个构建结构。
properties:
propertyName:
project.build.sourceEncoding:指定读取源码及文档的编码。
project.reporting.outputEncoding:指定呈现站点的html文档的编码。
远程仓库配置:
repositories:
repository:
id:
name:
url:
releases:
enabled:
updatePolicy:配置从远程仓库检查更新的频率。
never:从不检查更新。
always:每次构建都检查更新。
interval:每隔X分钟检查一次更新。
daily:每天检查一次更新。
checksumPolicy:配置Maven检查检验和文件的策略。
warn:在执行构建时输出警告信息。
fail:在执行构建时失败。
ignore:完全忽略校验和错误。
snapshots:
enabled:
layout:
插件管理:
pluginManagement:
plugins:
plugin:
groupId:
artifactId:
executions:
execution:
id:
phase:
goals:
插件仓库配置:
pluginRepositories:
pluginRepository:
id:
name:
url:
layout:
snapshots:
enabled:
releases:
enabled:
项目构建:
build:
plugins:
plugin:
groupId:
artifactId:
configuration:
executions:
execution:执行任务。
id:
phase:绑定的生命周期。
goals:指定插件目标。
goal:
资源过滤:
resources:
resource:
directory:
filtering:
testResources:
testResource:
directory:
filtering:
profiles:
profile:
id:
properties:
activation:
property:在某个系统属性存在时自动激活profile。
name:
os:操作系统环境激活。
name:
family:
arch:
version:
file:文件存在与否激活。
missing:
exists:
activeByDefault:默认激活。
-P:在命令行激活一个profile。
项目发布:
distributionManagement:
repository:发布版本仓库。
id:
name:
url:
snapshotRepository:快照版本仓库。
id:
name:
url:
项目信息:
scm:
connection:
developerConnection:
url:
ciManagement:
system:
url:
developers:
developer:
id:
name:
email:
timezone:
issueManagement:
system:
url:
licenses:
license:
name:
url:
快照版本:
在发布快照版本时,Maven为其打上时间戳。在项目依赖时,如果依赖的版本为快照版本,则按照更新规则更新快照版本。
快照版本只应该在组织内部的项目或模块间依赖使用。项目不应该依赖于任何组织外部的快照版本依赖。
Maven约定:
标签:
原文地址:http://www.cnblogs.com/qhdxqxx/p/5240842.html