Maven坐标
Posted 蜗牛不怕慢
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Maven坐标相关的知识,希望对你有一定的参考价值。
在使用Maven之前,当项目需要用到jar包依赖时,比如需要Spring Framework依赖的时候,大家会去Spring Framework网站寻找,当需要用到Log4j时,大家又需要去Apache网站寻找。由于各个项目的风格各异,大量的时候花费在搜索、浏览网页及下载jar包文件上面,而这些工作本应该交给机器来做。机器来处理这些依赖就需要有统一的规范、法则,而Maven就定义了这样一组规则:世界上任意一个构件都可以用Maven坐标来唯一标识。只要提供正确的坐标元素,Maven就能找到对应的构件。Maven坐标的元素主要包括groupId,artifactId,version,packaging,classfier,根据这些元素,Maven就可以唯一标识任何一个java构件,从而能从仓库中找到对应的构件供我们使用。先来看一组坐标定义:
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>javax.servlet.jsp.jstl-api</artifactId>
<version>1.2.1</version>
</dependency>
这是nexus-index的坐标定义,nexus-index是一个对Maven仓库编纂索引并提供搜索功能的类库,它是Nexus项目的一个子模块,会在后续介绍Nexus,下面先来解释一下各个坐标元素:
groupId:
定义当前maven项目隶属的实际项目。
首先,maven项目和实际项目不一定是一对一的关系。比如SpringFramework这一实际项目,其对应的maven项目会有很多,如: spring-core,spring-context等。这是由于maven中模块的概念,因此,一个实际项目往往会被划分成很多模块。
其次,groupId不应该对应项目隶属的组织或公司。原因很简单,一个组织下会有很多个实际项目,如果groupId只定义到组织级别,而后面我们会看到,artifactId只能定义maven项目(模块),那么实际项目这个层将难以定义。最后,groupId的表示方式与Java包名的表示方式类似,通常与域名反向一一对应。
artifactId:
该元素定义实际项目中的一个maven项目(模块),推荐的做法是使用实际项目名称作为artifactId前缀,这样做的好处是方便寻找实际构件。在默认情况下,maven生成的构件,其文件名会以artifactId作为开头,如:nexus-indexer-2.0.0.jar,使用实际项目名称作为前缀之后,就能方便从一个lib文件夹中找到某个项目的一组构件。
version:
该元素定义maven项目当前所处的版本,如:nexus-indexer-2.0.0.jar的版本是2.0.0。需要注意的是,maven定义了一套完整的版本规范,以及快照(SNAPSHOT)的概念。
packaging:
定义了maven项目的打包方式。默认值为jar,可取值:ejb / ejb3 /jar / par / rar / war。
classifier:
该元素用来帮助定义构建输出的一些附属构件。附属构件与主构件对应,如上例中的主构件是: nexus-indexer-2.0.0.jar,该项目可能还会通过使用一些插件生成如:nexus-indexer-2.0.0.jar-javadoc.jar、nexus-indexer-2.0.0.jar-sources.jar这样一些附属构件,其包含了java文档和源代码。这时候,javadoc和sources就是这两个附属构件的classifier。这样,附属构件也就拥有了自己唯一的坐标。
以上是关于Maven坐标的主要内容,如果未能解决你的问题,请参考以下文章