【Maven】坐标

坐标

  Maven的一大功能是管理项目依赖。为了能自动化地解析任何一个Java构件(jar/war),Maven就必须将它们唯一标识,这就是依赖管理的底层基础——坐标。
  
  坐标一词源于数学。在平面坐标系中,任何一个坐标(x,y)都能唯一标识该平面上的一点。

  Maven的中央仓库中包含数量巨大的构件,为了便于定位,Maven定义了这样一组规则:世界上任何一个构件都可以使用Maven坐标唯一标识,Maven坐标的元素包括groupId、artifactId、version、packaging、classifier,只要我们提供正确的坐标元素,Maven就能找到对应的构件。

  比如说:当需要使用Java5平台上TestNG的5.8版本时,就告诉Maven:

groupId=org.testng
artifactId=testng
version=5.8
classifier=jdk15

  Maven就会从中央仓库中寻找相应的构件供我们使用。实际开发中,也需要为项目定义适当的坐标,这是Maven强制要求的。在这个基础上,其他Maven项目才能引用该项目生成的构件。

坐标元素
<groupId>org.sonatype.nexus</groupId>
<artifactId>nexus-indexer</artifactId>
<version>2.0.0</version>
<packaging>jar</packaging>

groupId:定义当前Maven项目隶属的实际项目。

  Maven项目和实际项目不一定是一对一的关系。比如Spring Framework这一实际项目,其对应的Maven项目(模块)就有很多,如spring-core、spring-context等。groupId的表示方式与Java包名的表示方式类似,通常与域名反向一一对应。org.sonatype表示Sonatype公司建立的一个非盈利性组织,nexus表示Nexus这一实际项目,该groupId与域名nexus.sonatype.org对应。

artifactId:定义实际项目中的一个Maven项目(模块)。

  推荐的写法是使用实际项目名称作为artifactId的前缀。因为,在默认情况下,Maven生成的构件,其文件名会以artifactId作为开头,如nexus-indexer-2.0.0.jar,使用实际项目名称作为前缀,能方便的从一个lib文件夹中找到某个项目的一组构件。如:有5个项目,每个项目都有一个core模块,如果没有前缀,我们就会看到很多core-1.2.jar这样的文件,加上实际项目名前缀后,便能很容易区分,foo-core-1.2.jar、bar-core-1.2.jar……

version:定义Maven项目当前所处的版本。

  SNAPSHOT(快照)表示该版本正在开发,还不稳定。

packaging:定义Maven项目的打包方式。

  通常与生成构件的扩展名对应。上面的坐标,打包后的文件名为nexus-indexer-2.0.0.jar。默认值是jar。

classifier:定义构建输出的一些附属构件。

  附属构件与主构件对应,如上例中的主构件是nexus-indexer-2.0.0.jar,该项目可能还会通过使用一些插件生成如nexus-indexer-2.0.0-javadoc.jarnexus-indexer-2.0.0-sources.jar这样一些附属构件,包含了Java文档和源代码。
  注意:不能直接定义项目的classifier,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成。
  
  上述5个元素中,groupId、artifactId、version是必须定义的,packaging是可选的,而classifier是不能直接定义的。
  
  项目构件的名称与坐标相对应,规则为:artifactId-version[-classifier].packaging,[-classifier]表示可选。有一个例外,packaging为maven-plugin的构件,扩展名为jar。

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值