3. 坐标

坐标的组成

name tag
groupId 必须
artifactId 必须
version 必须
packaging 可选(默认为jar)
classifier 不能直接定义

groupId:

作用:定义当前maven项目隶属的实际项目。

推荐做法:
首先,maven项目和实际项目不一定是一对一的关系。
比如SpringFramework这一实际项目,其对应的maven项目会有很多,如spring-core、spring-context等。这是由于maven中模块的概念,因此,一个实际项目往往会被划分成很多模块。

其次,groupId不应该对应项目隶属的组织或公司。
原因是一个组织下会有很多实际项目,如果groupId只定义到组织级别,而后面我们会看到,artifactId只能定义maven项目(模块),那么实际项目这个层将难以定义。

最后,groupId的表示方式与Java包名的表示方式类似,通常与域名反向一一对应。
例如:groupId为org.sonatype.nexus,org.sonatype表示Sonatype公司建立的一个非盈利性组织,nexus表示Nexus这一实际项目,该groupId与域名nexus.sonatype.org对应。

artifactId:

作用:该元素定义实际项目中的一个Maven项目(模块)。
推荐做法: 是使用实际项目名称作为artifactId的前缀
这样做的好处是方便寻找实际构件。因为默认情况下,maven生成的构件,文件名会以artifactId作为开头,使用实际项目名称作为前缀后,就能方便从一个lib文件夹中找到某个项目的一组构件。

version:

作用:该元素定义Maven项目当前所处的版本。

packaging:

作用:该元素定义Maven项目的打包方式。

首先,打包方式通常与所生成构件的文件扩展名对应,不过这不是绝对的。
其次,打包方式会影响到构建的生命周期,比如jar打包和war打包会使用不同的命令。
最后,当不定义packaging的时候,Maven会使用默认值jar。

classifier:

作用:该元素用来帮助定义构建输出的一些附属构件。

附属构件与主构件对应,如上例中的主构件是nexusindexer2.0.0.jar,该项目可能还会通过使用一些插件生成如nexusindexer2.0.0javadoc.jar、nexusindexer2.0.0sources.jar这样一些附属构件,其包含了Java文档和源代码。这时候,javadoc和sources就是这两个附属构件的classifier。这样,附属构件也就拥有了自己唯一的坐标。还有一个关于classifier的典型例子是TestNG,TestNG的主构件是基于Java1.4平台的,而它又提供了一个classifier为jdk5的附属构件。

注意,不能直接定义项目的classifier,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成。

项目构件的文件名是与坐标相对应的,一般规则为 artifactId-version [-classifier] .packaging,[-classifier] 表示可选。需要强调一点,packaging并非一定与构件扩展名对应。

你可能感兴趣的:(3. 坐标)