POM 代表工程对象模型。它是使用 Maven 工作时的基本组建,是一个 xml 文件。它被放在工程根目录下,文件命名为 pom.xml。
POM 包含了关于工程和各种配置细节的信息,Maven 使用这些信息构建工程。
POM 也包含了目标和插件。当执行一个任务或者目标时,Maven 会查找当前目录下的 POM,从其中读取所需要的配置信息,然后执行目标。能够在 POM 中设置的一些配置如下:
project dependencies
plugins
goals
build profiles
project version
developers
mailing list
在创建 POM 之前,我们首先确定工程组(groupId),及其名称(artifactId)和版本,在仓库中这些属性是工程的唯一标识。
POM 举例
1
2
3
4
5
6
7
8
9
10
11
|
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 >com.companyname.project-group</ groupId > < artifactId >project</ artifactId > < version >1.0</ version > </ project > |
需要说明的是每个工程应该只有一个 POM 文件。
所有的 POM 文件需要 project 元素和三个必须的字段:groupId, artifactId,version。
在仓库中的工程标识为 groupId:artifactId:version
POM.xml 的根元素是 project,它有三个主要的子节点:
节点 | 描述 |
---|---|
groupId | 这是工程组的标识。它在一个组织或者项目中通常是唯一的。例如,一个银行组织 com.company.bank 拥有所有的和银行相关的项目。 |
artifactId | 这是工程的标识。它通常是工程的名称。例如,消费者银行。groupId 和 artifactId 一起定义了 artifact 在仓库中的位置。 |
version |
这是工程的版本号。在 artifact 的仓库中,它用来区分不同的版本。例如: com.company.bank:consumer-banking:1.0 com.company.bank:consumer-banking:1.1. |
Super POM
所有的 POM 都继承自一个父 POM(无论是否显式定义了这个父 POM)。父 POM 也被称作 Super POM,它包含了一些可以被继承的默认设置。
Maven 使用 effective pom(Super pom 加上工程自己的配置)来执行相关的目标,它帮助开发者在 pom.xml 中做尽可能少的配置,当然这些配置可以被方便的重写。
查看 Super POM 默认配置的一个简单方法是执行以下命令:mvn help:effective-pom
在你的电脑上的任意目录下创建一个 pom.xml 文件,使用上面提到的示例 pom 中的内容。
在下面的例子中,我们在 C:\MVN\project 目录中创建了一个 pom.xml 文件。
现在打开命令控制台,到 pom.xml 所在的目录下执行以下 mvn 命令。
1
|
C:\MVN\project>mvn help:effective-pom |
Maven 将会开始处理并显示 effective-pom。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
[INFO] Scanning for projects... [INFO] Searching repository for plugin with prefix: 'help'. [INFO] ------------------------------------------------------------------------ [INFO] Building Unnamed - com.companyname.project-group:project-name:jar:1.0 [INFO] task-segment: [help:effective-pom] (aggregator-style) [INFO] ------------------------------------------------------------------------ [INFO] [help:effective-pom {execution: default-cli}] [INFO] ..... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: < 1 second [INFO] Finished at: Thu Jul 05 11:41:51 IST 2012 [INFO] Final Memory: 6M/15M [INFO] ------------------------------------------------------------------------ |
Effective POM 的结果就像在控制台中显示的一样,经过继承、插值之后,使配置生效。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
<? xml version = "1.0" encoding = "UTF-8" ?> <!-- ================================================================= --> <!-- --> <!-- Generated by Maven Help Plugin on 2012-07-05T11:41:51 --> <!-- See: http://maven.apache.org/plugins/maven-help-plugin/ --> <!-- --> <!-- ================================================================= --> <!-- ================================================================= --> <!-- --> <!-- Effective POM for project --> <!-- 'com.companyname.project-group:project-name:jar:1.0' --> <!-- --> <!-- ================================================================= --> < 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 h ttp://maven.apache.org/xsd/maven-4.0.0.xsd"> < modelVersion >4.0.0</ modelVersion > < groupId >com.companyname.project-group</ groupId > < artifactId >project</ artifactId > < version >1.0</ version > < build > < sourceDirectory >C:\MVN\project\src\main\java</ sourceDirectory > < scriptSourceDirectory >src/main/scripts</ scriptSourceDirectory > < testSourceDirectory >C:\MVN\project\src\test\java</ testSourceDirectory > < outputDirectory >C:\MVN\project\target\classes</ outputDirectory > < testOutputDirectory >C:\MVN\project\target\test-classes</ testOutputDirectory > < resources > < resource > < mergeId >resource-0</ mergeId > < directory >C:\MVN\project\src\main\resources</ directory > </ resource > </ resources > < testResources > < testResource > < mergeId >resource-1</ mergeId > < directory >C:\MVN\project\src\test\resources</ directory > </ testResource > </ testResources > < directory >C:\MVN\project\target</ directory > < finalName >project-1.0</ finalName > < pluginManagement > < plugins > < plugin > < artifactId >maven-antrun-plugin</ artifactId > < version >1.3</ version > </ plugin > < plugin > < artifactId >maven-assembly-plugin</ artifactId > < version >2.2-beta-2</ version > </ plugin > < plugin > < artifactId >maven-clean-plugin</ artifactId > < version >2.2</ version > </ plugin > < plugin > < artifactId >maven-compiler-plugin</ artifactId > < version >2.0.2</ version > </ plugin > < plugin > < artifactId >maven-dependency-plugin</ artifactId > < version >2.0</ version > </ plugin > < plugin > < artifactId >maven-deploy-plugin</ artifactId > < version >2.4</ version > </ plugin > < plugin > < artifactId >maven-ear-plugin</ artifactId > < version >2.3.1</ version > </ plugin > < plugin > < artifactId >maven-ejb-plugin</ artifactId > < version >2.1</ version > </ plugin > < plugin > < artifactId >maven-install-plugin</ artifactId > < version >2.2</ version > </ plugin > < plugin > < artifactId >maven-jar-plugin</ artifactId > < version >2.2</ version > </ plugin > < plugin > < artifactId >maven-javadoc-plugin</ artifactId > < version >2.5</ version > </ plugin > < plugin > < artifactId >maven-plugin-plugin</ artifactId > < version >2.4.3</ version > </ plugin > < plugin > < artifactId >maven-rar-plugin</ artifactId > < version >2.2</ version > </ plugin > < plugin > < artifactId >maven-release-plugin</ artifactId > < version >2.0-beta-8</ version > </ plugin > < plugin > < artifactId >maven-resources-plugin</ artifactId > < version >2.3</ version > </ plugin > < plugin > < artifactId >maven-site-plugin</ artifactId > < version >2.0-beta-7</ version > </ plugin > < plugin > < artifactId >maven-source-plugin</ artifactId > < version >2.0.4</ version > </ plugin > < plugin > < artifactId >maven-surefire-plugin</ artifactId > < version >2.4.3</ version > </ plugin > < plugin > < artifactId >maven-war-plugin</ artifactId > < version >2.1-alpha-2</ version > </ plugin > </ plugins > </ pluginManagement > < plugins > < plugin > < artifactId >maven-help-plugin</ artifactId > < version >2.1.1</ version > </ plugin > </ plugins > </ build > < repositories > < repository > < snapshots > < enabled >false</ enabled > </ snapshots > < id >central</ id > < name >Maven Repository Switchboard</ name > < url >http://repo1.maven.org/maven2</ url > </ repository > </ repositories > < pluginRepositories > < pluginRepository > < releases > < updatePolicy >never</ updatePolicy > </ releases > < snapshots > < enabled >false</ enabled > </ snapshots > < id >central</ id > < name >Maven Plugin Repository</ name > < url >http://repo1.maven.org/maven2</ url > </ pluginRepository > </ pluginRepositories > < reporting > < outputDirectory >C:\MVN\project\target/site</ outputDirectory > </ reporting > </ project > |
在上面的 pom.xml 中,你可以看到 Maven 在执行目标时需要用到的默认工程源码目录结构、输出目录、需要的插件、仓库和报表目录。
Maven 的 pom.xml 文件也不需要手工编写。
Maven 提供了大量的原型插件来创建工程,包括工程结构和 pom.xml。
总结
以上就是本文关于maven中pom.xml详细介绍的全部内容,希望对大家有所帮助。有什么问题可以随时留言,欢迎大家留下宝贵的意见,小编会及时修改。感谢朋友们对本站的支持!
原文链接:http://blog.csdn.net/augus3344/article/details/51793489