概述
之前接触maven管理项目,学习了些皮毛。后来发觉自己之前现查现用这种做法应该是不可取的——对一个问题的解决方案秒秒钟就忘掉了,然后还得查阅博客。今天找时间详细学习了一些pom文件各部分的意义,虽说前路漫漫,但也受益匪浅。
以现在接触的比较大型的webx工程来看,一个pom文件大致包括以下几个部分:
<基本内容>
<dependencies>
<parent>
<dependencyManagement>
<modules>
<properties>
<build>
<plugin>
<pluginManagement>
等等。。
详解:
<基本内容> : 包括:
<groupId> 项目或者组织的唯一标识
< artifactId> 项目通用名称
<version> 项目版本
<packaging>打包机制
<name> 用户描述项目名称(可选)
一般说,前四项就可确定了项目的唯一坐标。
dependencies:
内部包含若干<dependency>
{ groupId, artifactId,version 三个基本属性
type :默认jar类型
scope: 当前包依赖类型
optional: false时, 继承这个项目所有的子项目。 true时, 该项目的子项目需要显式引入
exclusion :排除某项 }
dependencyManagement:
通常在最顶层父pom中,让所有在子项目中引用一个依赖而不用显式地列出版本号。
modules:
将项目分块,达到高内聚,低耦合的目的
properties:
声明一些常量。如:
<file.encoding>UTF-8<file.encoding>
引用时 : ${file.encoding}
也可以通过project.xx引用项目的定义的属性,例如: ${project.groupId} 引用当前pom定义的groupId
build:
defaultGoal 默认目标
directory 制定buildtarget目标下的目录
等等
plugin:
声明项目中所使用的插件
pluginManagement:
作用类似于dependencyManagement, 定义子项目中的插件。 这样在子项目中使用插件时,可以不用指定其版本,由父项目统一进行管理。
parent:
如果一个工程是parent 或者aggregation(muti-module), 它的packaging 赋值必须为 pom
child工程从父工程继承:
{ dependencies
developers
contributors
plugin lists reports lists
等等}
声明自己的parent:
<parent>
groupId
artifactId
version
relativePath(可选) :maven首选搜索这个地址,然后搜索远程repositiories
</parent>
待续。
参考资料:
《maven配置详解》 http://blog.csdn.net/eclipser1987/article/details/5755603
《使用maven配置web应用》 http://seanzhou.iteye.com/blog/1407524
《maven最佳实践》http://juvenshun.iteye.com/blog/305865
《maven中dependencies和dependency》http://liugang594.iteye.com/blog/1687781
《maven pom文件详解》http://blog.csdn.net/zhuxinhua/article/details/5788546