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