首页 > 代码库 > Maven坐标

Maven坐标

在平面几何中,用坐标(x, y)唯一确定一个点。在maven的世界里,用maven坐标来唯一确定一个构件。

maven坐标元素包括groupId, artifactId, version, packaging, classifier。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.7</version>
    <packaging>pom</packaging>
...... </project>

groupId:对应公司的一个实际项目

artifactId:实际项目中的子工程

version:版本号

packaging:打包方式,默认为jar,还有pom, maven-plugin, ejb, war, ear, rar, par等。

classifier:比如dom4j-1.6.1-sources.jar,dom4j-1.6.1-javadoc.jar这里的sources、javadoc就是一个classifier。再比如,一个包用不同的JDK版本编译,可以加上classifier,在dependency配置依赖时,可以指定具体的classifier的包(例子)。classifier是一个可选项,也不能在定义构件时指定,而是通过其它插件额外生成的附属构件。之所以被作为坐标的一部分,我想就是因为dependency时候有时需要指定。

构件的文件名是与坐标相对应的,一般规则为 artifactId-version[-classifier].packaging,[-classifier是可选的]。

个人认为最佳实践:groupId是artifactId的前缀,artifactId是package的前缀。比如,groupId是com.huawei.soa,artifactId是com.huawei.soa.precompile.meta,class是com.huawei.soa.precompile.meta.bs.BusinessServiceUtils,这样的话,看到class能知道在哪个包里,看到jar能知道属于哪个groupId,方便追根溯源。

Maven坐标