通过前面几部分知识,我们对maven已经有了初步的印象,就像Make的Makefile、Ant的build.xml一样,Maven项目的核心是pom.xml。POM(Project Object Model,项目对象模型)定义了项目的基本信息,用于描述项目如何构建,声明依赖,等等。我们来看看maven中pom.xml文件主要标签的意思及其用法,来看一下pom.xml文件的结构:
12 4.0.0 3 4com.uidp 5UidpParent 60.0.1-SNAPSHOT 7pom 8 9 10UidpParent 11 12http://maven.apache.org 13 14 1516 64 65 66UTF-8 17 18http://192.168.0.70:8081/content/groups/public/ 19 203.1 212.4 222.9.1 232.4.1 242.7 25 26 27 284.11 2910.2.0.4 303.2.8.RELEASE 313.2.2 321.2.0 335.1.25 341.7.3 35 361.4 371.5.5 381.2.2 39 401.2.17 411.7.5 421.7.5 43 442.3.19 45 462.5.0 471.9.7 48 493.0.1 502.2 511.04 521.8 532.0.0 542.6 55 56 571.8.5 581.4.9 591.4.9 601.4.9 61 62 6367 299 30068 69 29870 75 76 77junit 71junit 72${junit.version} 73test 7478 82 83org.springframework 79spring-web 80${springframework.version} 8184 88 89org.springframework 85spring-webmvc 86${springframework.version} 8790 94 95org.springframework 91spring-beans 92${springframework.version} 9396 100 101org.springframework 97spring-context 98${springframework.version} 99102 106 107org.springframework 103spring-context-support 104${springframework.version} 105108 112 113org.springframework 109spring-core 110${springframework.version} 111114 118 119org.springframework 115spring-jdbc 116${springframework.version} 117120 124 125org.springframework 121spring-tx 122${springframework.version} 123126 130 131org.springframework 127spring-test 128${springframework.version} 129132 136 137org.springframework 133spring-expression 134${springframework.version} 135138 142 143 144org.springframework 139spring-aop 140${springframework.version} 141145 149 150org.mybatis 146mybatis 147${mybatis.version} 148151 155 156org.mybatis 152mybatis-spring 153${mybatis-spring.version} 154157 161 162mysql 158mysql-connector-java 159${mysql-driver.version} 160163 167 168com.oracle 164ojdbc14 165${oracle.version} 166169 173 174 175org.aspectj 170aspectjweaver 171${aspectjweaver.version} 172176 180commons-dbcp 177commons-dbcp 178${commons-dbcp.version} 179181 185commons-pool 182commons-pool 183${commons-pool.version} 184186 190 191 192 193commons-fileupload 187commons-fileupload 188${commons-fileupload.version} 189194 198log4j 195log4j 196${log4j.version} 197199 203org.slf4j 200slf4j-api 201${slf4j-api.version} 202204 208 209 210org.slf4j 205slf4j-log4j12 206${slf4j-log4j12.version} 207211 215 216 217 218org.freemarker 212freemarker 213${freemarker.version} 214219 223com.fasterxml.jackson.core 220jackson-core 221${jackson-core.version} 222224 228 229org.codehaus.jackson 225jackson-mapper-asl 226${jackson-mapper-asl.version} 227230 235 236javax.servlet 231javax.servlet-api 232${javax.servlet-api.version} 233provided 234237 242 243javax.servlet.jsp 238jsp-api 239${jsp-api.version} 240provided 241244 248 249com.googlecode 245kryo 246${kryo.version} 247250 254 255org.yaml 251snakeyaml 252${snakeyaml.version} 253256 260 261redis.clients 257jedis 258${jedis.version} 259262 266 267 268commons-lang 263commons-lang 264${commons-lang.version} 265269 274 275org.mockito 270mockito-core 271${mockito-core.version} 272test 273276 281 282org.powermock 277powermock-core 278${powermock-core.version} 279test 280283 288 289org.powermock 284powermock-api-mockito 285${powermock-api-mockito.version} 286test 287290 295 296 297org.powermock 291powermock-module-junit4 292${powermock-module-junit4.version} 293test 294301 312 313 314 315302 306releases 303public 304http://59.50.95.66:8081/nexus/content/repositories/releases 305307 311snapshots 308Snapshots 309http://59.50.95.66:8081/nexus/content/repositories/snapshots 310316 352 353 354317 318 351319 327 328org.apache.maven.plugins 320maven-compiler-plugin 321${maven-compiler-plugin.version} 322323 3261.7 324 1.7 325329 333 334 335org.apache.maven.plugins 330maven-javadoc-plugin 331${maven-javadoc-plugin.version} 332336 340 341org.apache.maven.plugins 337maven-release-plugin 338${maven-release-plugin.version} 339342 349 350org.apache.maven.plugins 343maven-deploy-plugin 344${maven-deploy-plugin.version} 345346 348true 347355 367 368 369356 366nexus 357nexus 358${repository-url} 359360 362true 361363 365true 364
我们可以看到maven的pom.xml文件结构非常清晰,把项目创建好后,我们基本上是在dependencies元素下添加一些子元素及plugins元素下添加一些插件,下面我们来介绍一下各个元素的含义。
1) project是所有pom.xml的根元素,并且在里面定义了命名空间和xsd元素。
2) modelVersion 当前pom模型的版本。
3) groupId定义当前maven项目隶属的实际项目,并会根据这给项目建立包结构。
4) artifactId定义项目中的某个模块名称,如果只有一个模块那就是项目的名称。
5) version 定义maven项目当前所处的版本号,默认0.0.1-SNAPSHOT为快照版本。
6) packaging定义maven项目的打包方式,可以是jar包、war包、pom。
7) dependencies元素底下就是加入依赖包的地方,那么我们从哪里查询依赖包呢,可以查询的地方比较多,我给出一个大家用得比较多的仓库:。
8) 每个dependency都是一个依赖包,依赖包也就是在dependency里面定义各个依赖包的坐标,这样maven就会从网上下载依赖包到你本地仓库中,有所不同的是dependency元素包含了一个子元素,这个就是对maven生命周期的一个说明,当然除了上面四个子元素外,还包含几个其他的元素。
(1)type说明依赖的类型
(2)optional标记依赖是否可选
(3)exclusions 用来排斥传递依赖
我们具体来看看这个结构:
<dependency>
<groupId>实际项目</groupId>
<artifactId>模块</artifactId>
<version>版本</version>
<type>依赖类型</type>
<scope>依赖范围</scope>
<optional>依赖是否可选</optional>
<!—主要用于排除传递性依赖-->
<exclusions>
<exclusion>
<groupId>…</groupId>
<artifactId>…</artifactId>
</exclusion>
</exclusions>
</dependency>
Maven是通过groupId、artifactId、version这三类似于坐标的元素来确定唯一性的,因此这三个元素对于每个依赖大多是必须的,后面会详细介绍依赖、聚合、继承等知识点。
没有任何实际的Java代码,我们能够定义一个Maven项目的POM,这体现了Maven的一大优点,它能让项目对象模型最大程度地与实际代码相独立,我们可以称之为解耦。这在很大程度上避免了Java代码和POM代码的相互影响。只要我们定义的POM稳定后,日常的Java代码开发工作中基本不会涉及到POM的修改。
可爱博主:AlanLee
博客地址:
本文出自博客园,欢迎大家加入博客园。