学习Maven之一
接下来我们介绍下面这几个核心概念:
Maven坐标
Maven仓库
POM(Project Object Model)
Maven插件
Maven生命周期
Maven依赖管理
Maven坐标
在我们开发Maven项目的时候,需要为其定义适当的坐标,这是Maven强制要求的。在这个基础上,其他
Maven项目才能应用该项目生成的构件。在maven项目pom.xml配置文件很重要,入下这样写的:
groupId :groupId的值是项目的包名
artifactId :artifactId的值是模块名
version :version的值是版本
Maven的一个核心的作用就是管理项目的依赖,引入我们所需的各种jar包等。为了能自动化的解析任何一个Java
构件,Maven必须将这些Jar包或者其他资源进行唯一标识,这是管理项目的依赖的基础,也就是我们要说的坐标。
包括我们自己开发的项目,也是要通过坐标进行唯一标识的,这样才能才其它项目中进行依赖引用。
何为使用Maven坐标
Maven的世界是拥有非常多的Java构件的,可能是jar、可能是war、也可能是其他的一些东西。
Maven制定了一套规则,使用坐标进行唯一标识。Maven的坐标元素包括groupId、artifactId、version、packaging、classfier。提供正确的坐标元素,Maven就能找到对应的构件,首先本地仓库查找,没有的话再去远程仓库下载。如果没有配置远程仓库,会默认从中央仓库地址(http://repo1.maven.org/maven2)下载构件,该中央仓库包含了世界上大部分流行的开源项目构件,但不一定所有构件都有。
坐标详解
Maven坐标为各种构件引入了秩序,任何一个构件都必须明确定义自己的坐标,通过坐标作为其唯一标识,而一
组Maven坐标是通过一些元素定义的,它们是groupId,artifactId,version,packaging,class-sifer。需要注意的是
groupId、artifactId、version、packaging是必须定义的,classifier是不能被直接定义的,因为附属构件不是项目
直接默认生成的,而是由附加的插件帮助生成的。
这样的坐标我们可在pom.xml配置文件中找到,下面是一组坐标定义:
下面讲解一下各个坐标元素
groupId
定义当前Maven项目隶属的实际项目。Maven项目和实际项目不一定是一对一的关系。由于Maven中模块的概念,因此,一个实际项目往往会被划分成很多模块。其次,groupId不应该对应项目隶属的组织或公司。因为一个组织下会有很多实际项目,如果groupId只定义到组织级别,而后面我们会看到,artifactId只能定义Maven项目(模块),那么实际项目这个层次将难以定义。最后,groupId的表示方式与Java包名的表达方式类似,通常与域名反向对应。
artifactId
该元素定义当前实际项目中的一个Maven项目(模块),推荐的做法是使用实际项目名称作为artifactId的前
缀。
version
该元素定义Maven项目当前所处的版本。
packaging
该元素定义Maven项目打包的方式,打包方式通常与所生成构件的文件扩展名对应,如上的packaging为jar,最终的文件名为helloworld-1.0-SNAPSHOT.jar。也可以打包成war, ear等。当不定义packaging的时候,Maven会使用默认值jar
classifier
该元素用来帮助定义构建输出的一些附件。附属构件与主构件对应,如上例中的主构件为helloworld-1.0-
SNAPSHOT.jar,该项目可能还会通过一些插件生成如helloworld-1.0-SNAPSHOT-javadoc.jar,helloworld-1.0-
SNAPSHOT-sources.jar, 这样附属构件也就拥有了自己唯一的坐标。