Maven POM详解坐标体系

 

创建Maven项目,IDEA自动生成的POM文件如下:

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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>
  
    <groupId>com.lf662000groupId>
    <artifactId>pomExampleartifactId>
    <version>1.0-SNAPSHOTversion>

project>
 

其中的groupId,artifactId,version是Maven 2.0 和3.0所允许的最小值,在Maven体系中,通过这三个元素唯一的确定一个项目。有一个专有名词Maven坐标(Maven Coordinates )。坐标可以通过经纬度在整个世界地图上用东西经、南北纬的不同数值来唯一标识出一个地点,那么Maven坐标又是如何在Maven的依赖世界中唯一标识一个项目呢?秘密就在这个允许的最小值中,通过三个标识配合,能够唯一定位一个项目。

groupId:唯一定义一个组织或者项目。上文中的

<groupId>com.lf662000groupId>

在Maven世界中,会到Maven的根目录下的com目录下的lf662000目录中去查找这个项目,其中 . 会被默认解析为文件系统的分隔符,当然了,“.”不是必须的,可以直接使用一个名词来区分,但推荐的方式是类似Java中包命名方式一样的,使用一个唯一表示的网址来标识项目。按照字面意思,其实就是定义了一个组织。

artifactId:唯一标识一个项目或者模块。上文中的

 <artifactId>pomExampleartifactId>

在Maven世界中,会借着groupId的信息,继续查找artifactId下的内容,即查找com/lf662000/pomExample下的项目。一个组织下面会有多个项目或者工程,groupId唯一定义了一个组织,artifactId就来明确了这个组织下的具体项目是什么内容。如果Maven项目最终是Jar包形式来打包,Jar包的名称以artifactId来命名,基于这个规则,我们就需要考虑在artifactId中设置一个什么样的名字才能不产生二义性。如果仅仅用一个名词区分,例如都叫pomExample,那么在多个项目一起工作的时候,比如在StateGrid下有个pomExample,在CSG在也有个pomExample,那么打出来的包就好玩,他们是一样的。所以这里建议增加上组织最后一个标识,来区分不同的项目。上文的artifactId建议的方式:

<artifactId>lf662000-pomExampleartifactId>

version:版本号,最后一个定位的内容。在Maven世界中,经历了groupId目录、artifactId目录,会最后再查找Version目录,那么就会唯一定位一个项目了。上文中的

<version>1.0-SNAPSHOTversion>

会继续接力。

在最终的Maven世界中,会在如下的文件目录中查找最终的项目包。

MavenREPO
    ——groupId
            ——artifactId
                ——version
                    ——具体的jar包

 

转载于:https://www.cnblogs.com/lf662000/p/6758770.html

你可能感兴趣的:(Maven POM详解坐标体系)