快速预览
完整的POM文件示例:
4.0.0
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
基础配置
项目基本信息
junit
junit
4.0
jar
- groupId:唯一的组织名称或者项目名称
- artifactId:项目名称
- version:项目版本号
- packaging:项目的分发类型(jar、war等其它方式)
父类POM
4.0.0
org.codehaus.mojo
my-parent
2.0
../my-parent
my-project
- relativePath:父项目的路径(相对路径)
多模块配置
4.0.0
org.codehaus.mojo
my-parent
2.0
pom
my-project
another-project
third-project/pom-example.xml
- module:子模块artifactId
注:多模块项目父模块分发类型必须为POM
依赖配置
...
junit
junit
4.0
jar
test
true
...
...
构建时指定classifier,可以设置任意名称:
${artifactId}-${version}
org.apache.maven.plugins
maven-jar-plugin
3.0.2
jdk5
classifier:它表示在相同版本下针对不同的环境或者jdk使用的jar,如果配置了这个元素,则会将这个元素名在加在最后来查找相应的jar。
type:对应于从属工件的包装类型, 这默认为jar。
scope:maven的scope决定依赖的包是否加入本工程的classpath下,Maven提供了如下几种依赖范围
假设 A -> B, B -> C, 由 A -> B, 推出 A -> C,则C具有传递性
依赖范围 | 编译 | 测试 | 运行时 | 传递性 | 说明 |
---|---|---|---|---|---|
compile | Y | Y | Y | Y | 默认作用域,编译依赖作用于所有环境变量中 |
test | - | Y | - | - | 编译期不需要该依赖,仅作用于测试和运行环境中 |
provided | Y | Y | - | - | 类似于compile,但表示打包的时候可以不用包进去,期望JDK或容器在运行时提供它。 它仅在编译和测试类路径中可用,并且不是传递性的。 |
runtime | - | Y | Y | Y | 他的范围表明该依赖不是编译所必需的,而是用于执行。 它在运行时和测试类路径中,但不在编译类路径中。 |
system | Y | Y | - | Y | 和provide作用域类似,用于非Maven管理第三方jar依赖, 通常和systemPath配合使用 |
- systemPath:
仅在依赖范围是system时使用。 否则,如果设置此元素,构建将失败。
路径必须是绝对路径,因此建议使用属性来指定机器特定路径(更多属性如下),例如$ {java.home} / lib。
由于假定系统范围依赖关系是事先安装的,因此Maven不会检查项目的存储库,而是检查以确保文件存在。
如果没有,Maven将会失败,并建议您手动下载并安装它
- optional:仅限制包的传递依赖性,不影响包的classpath
依赖版本规范
- 1.0 : 软依赖1.0,可以匹配所有其它的依赖范围
- [1.0] : 强制性依赖 1.0
- (,1.0):x <=1.0
- [1.2, 1.3]:1.2<= x <=1.3
- [1.0, 2.0]: 1.0 <= x < 2.0
- [1.5,): x>=1.5
- (,1.0],[1.2,):x <= 1.0 或 x >= 1.2
- (,1.1),(1.1,):非 1.1 之外的所有版本
Exclusions
排除项包含一个或多个排除元素,每个排除元素都包含一个groupId和artifactId,表示要排除的依赖关系。
与可选或不可安装和使用的可选项不同,排除项主动将自己从依赖关系树中移除。
...
org.apache.maven
maven-embedder
2.0
org.apache.maven
maven-core
...
...
...
org.apache.maven
maven-embedder
3.1.0
*
*
...
...
Properties
...
1.7
1.7
UTF-8
UTF-8
...
dependencyManagement
只是对版本进行管理,不会实际引入jar, 在依赖配置中无需指定版本。
org.thymeleaf
thymeleaf
3.0.7.RELEASE
Build Settings
Build
install
${basedir}/target
${artifactId}-${version}
filters/filter1.properties
...
defaultGoal:如果没有给出缺省目标(goal)或执行阶段(phase),则执行该目标。如果给出了一个目标,它应该被定义为它在命令行中(例如jar:jar)。 如果定义了阶段(例如安装),也是如此
directory:项目编译路径
finalName:项目包名称
filter:定义* .properties文件,其中包含适用于接受其设置的资源的属性列表(如下所述)。换句话说,过滤器文件中定义的“name = value”对将替换构建资源中的$ {name}字符串。 上面的例子定义了filter /目录下的filter1.properties文件。 Maven的默认过滤器目录是$ {basedir} / src / main / filters /
Resources
指定项目中资源位置,资源通常不是代码,它们不会被编译。
例如,一个Plexus项目需要一个配置文件(指定容器的组件配置)来存放在META-INF / plexus目录中。 尽管我们可以很容易地将这个文件放在src / main / resources / META-INF / plexus中,但是我们希望给Plexus自己的src / main / plexus目录。 为了使JAR插件正确地绑定资源,你需要指定类似于以下内容的资源
...
META-INF/plexus
false
${basedir}/src/main/plexus
configuration.xml
**/*.properties
...
...
- targetPath:指定资源文件打包后路径
- directory:资源文件工程路径
- include:指定将文件作为资源包含在该指定目录下,使用*作为通配符。
- exclude:指定要忽略哪些文件
- testResources: 测试资源文件
Plugins
...
org.apache.maven.plugins
maven-jar-plugin
2.6
false
true
test
...
...
- extensions: 是否加载这个插件的扩展(生命周期扩展),默认是false。
- inherited: 是否让子模块继承这个插件, 默认为true。
- configuration:插件参数配置
- dependencies:插件依赖关系配置
- executions:插件目标绑定生命周期
Plugin Management
管理插件的版本,不会实际引入jar, 在插件配置中无需指定版本。
...
...
org.apache.maven.plugins
maven-jar-plugin
2.6
pre-process-classes
compile
jar
pre-process
...
Extensions
自定义生命周期扩展
...
...
org.apache.maven.wagon
wagon-ftp
1.0-alpha-3
...
Reporting
该配置通常用于项目文档和报告生成
...
...
sunlink
javadoc
true
http://java.sun.com/j2se/1.5.0/docs/api/
...
更多项目信息
Licenses
Apache License, Version 2.0
https://www.apache.org/licenses/LICENSE-2.0.txt
repo
A business-friendly OSS license
Organization
...
Codehaus Mojo
http://mojo.codehaus.org
Developers
...
jdoe
John Doe
[email protected]
http://www.example.com/jdoe
ACME
http://www.example.com
architect
developer
America/New_York
http://www.example.com/jdoe/pic
...
Contributors
...
Noelle
[email protected]
http://noellemarie.com
Noelle Marie
http://noellemarie.com
tester
America/Vancouver
[email protected]
...
Environment Settings
Issue Management
定义缺陷跟踪系统信息(Bugzilla,TestTrack,ClearQuest等)。
...
Bugzilla
http://127.0.0.1/bugzilla/
...
Continuous Integration Management
...
continuum
http://127.0.0.1:8080/continuum
mail
true
true
false
false
[email protected]
...
Mailing Lists
...
User List
[email protected]
[email protected]
[email protected]
http://127.0.0.1/user/
http://base.google.com/base/1/127.0.0.1
...
SCM
源代码软件版本管理信息配置
...
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
...
Repositories
...
false
always
warn
true
never
fail
codehausSnapshots
Codehaus Snapshots
http://snapshots.maven.codehaus.org/maven2
default
...
...
Distribution Management
...
false
corp1
Corporate Repository
scp://repo/maven2
default
true
propSnap
Propellors Snapshots
sftp://propellers.net/maven
legacy
...
...
Profiles
...
test
...
...
...
...
...
...
...
...
...
Activation
...
test
false
1.5
Windows XP
Windows
x86
5.1.2600
sparrow-type
African
${basedir}/file2.properties
${basedir}/file1.properties
...