1. 简单介绍

maven的世界中拥有数量很巨大的构件,也就是平时用的一些jar,war等文件。

在maven为这些构件引入坐标概念之前,我们无法使用不论什么一种方式来唯一标识全部这些构件。

因此,当须要用到Spring Framework依赖的时候。我们通常会去Spring Framework官网寻找;当用到log4j依赖的时候。我们又会去Apache官网去寻找。这样,我们花费了大量的时间在搜索。浏览网页上。

反复的搜索,浏览网页和下载jar文件。这应该交给机器去完毕。机器工作必须基于提前定义的规则。


Maven定义了这样一组规则:世界上不论什么一个构件都能够使用maven坐标唯一标识,maven坐标的元素包括groupId。artifactId,version。packaging,classifier。

如今。仅仅要我们提供正确的坐标元素,maven就能找到相应的构件。比方说,当须要使用java5平台上TestNG的5.8版本号时,就告诉maven:"groupId=org.testing;artifactId=testing;version=5.8;classifier=jdk15"。maven就会从仓库中寻找相应的构件供我们使用。或许你会奇怪。maven是从哪里下载构件的呢?答案非常easy,maven内置了一个中央仓库的地址(http://repo.maven.org/maven2),该中央仓库包括了世界上大部分流行的开源项目构件。maven会在须要的时候去那里下载。


在我们开发自己项目的时候。也须要为其定义适当的坐标,仅仅有这样。其它的项目才干引用该项目生成的构件。

2. 具体解释

不论什么一个构件都必须明白定义自己的坐标,maven坐标由groupId,artifactId,version,packaging,chassifier构成。我们还是以hello-world项目为比例如以下:
<groupId>com.sjf.mavendemo</groupId>
<artifactId>maven-hello-world</artifactId>
<version>1.0.0SNAPSHOT</version>
<packaging>jar</packaging>
 
上述代码中,坐标分别为groupId=com.sjf.mavendemo,artifactId=maven-hello-world。version=1.0.0SNAPSHOT,packaging=jar。

以下详解一下各个坐标元素:

  • groupId : 定义当前maven项目隶属的实际项目。首先。maven项目和实际项目不一定是一对一的关系。比方SpringFramework这一实际项目,其相应的maven项目会有非常多,如: spring-core,spring-context等。

    这是因为maven中模块的概念,因此,一个实际项目往往会被划分成非常多模块。其次。groupId不应该相应项目隶属的组织或公司。原因非常easy。一个组织下会有非常多个实际项目,假设groupId仅仅定义到组织级别,而后面我们会看到。artifactId仅仅能定义maven项目(模块),那么实际项目这个层将难以定义。最后。groupId的表示方式与java包名的表示方式类似,通常与域名反向一一相应。

  • artifactId : 该元素定义实际项目中的一个maven项目(模块),推荐的做法是使用实际项目名称作为artifactId前缀。

    比方上面实例中的artifactId是mavendemo-hello-world。使用了实际项目名mavendemo作为前缀,这样做的优点是方便寻找实际构件。

    在默认情况下,maven生成的构件。其文件名称会以artifactId作为开头。如:mavendemo-hello-world-1.0.0.jar。使用实际项目名称作为前缀之后,就能方便从一个lib目录中找到某个项目的一组构件。

  • version : 该元素定义maven项目当前所处的版本号,如:mavendemo-hello-world-1.0.0.jar的版本号是1.0.0。

    须要注意的是,maven定义了一套完整的版本号规范,以及快照(SNAPSHOT)的概念。

  • packaging : 该元素定义maven项目的打包方式。首先,打包方式通常与所生成构件的文件扩展名相应,如:mavendemo-hello-world.1.0.0.jar的packaging为jar。而使用war打包方式的maven项目。终于生成的构件会有一个.war文件,只是这不是绝对的。

    其次。打包方式会影响到构建的生命周期,比方jar打包和war打包会使用不同的命令。

    最后。当不定义packaging的时候。maven会使用默认值jar。

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

    附属构件与主构件相应,如上例中的主构件是: mavendemo-hello-world-1.0.0.jar,该项目可能还会通过使用一些插件生成如:mavendemo-hello-world-1.0.0-javadoc.jar、mavendemo-hello-world-1.0.0-sources.jar这样一些附属构件,其包括了java文档和源码。

    这时候,javadoc和sources就是这两个附属构件的classifier。这样。附属构件也就拥有了自己唯一的坐标。


注意:不能直接定义项目的classifier,由于附属构件不是项目直接默认生成的。而是由附加的插件帮助生成。
 
上述5个元素中,groupId。artifactId。version是必须定义的,packaging是可选的(默觉得jar)。而classifier是不能直接定义的。

 
同一时候,项目构件的文件名称是与坐标相相应的。一般的规则为: artifactId-version[-classifier].packaging,[-classifier]表示可选。





来源于:《Maven实战》



[Maven实战](7)坐标的更多相关文章

  1. Maven实战06_坐标和邮件服务模块

    1:何为Maven坐标 为了能够自动化地解析任何一个Java构件,Maven就必须要将其唯一标识,这就是依赖管理的底层基础--坐标. 学过数学的人都知道平面直角坐标系,x,y分别为其横,纵坐标,将会在 ...

  2. Maven实战(六)依赖

    我们项目中用到的jar包可以通过依赖的方式引入,构建项目的时候从Maven仓库下载即可. 1. 依赖配置    依赖可以声明如下: <project> ... <dependenci ...

  3. Maven实战之Quick Start

    Introduction Maven是一个异常强大的构建工具,能够帮我们自动化构建过程,从清理.编译.测试到生成报告,再到打包和部署.通过Maven,我们只需要输入简单的命令(如mvn clean i ...

  4. Maven实战五

    转载:http://www.iteye.com/topic/1123232 我们项目中用到的jar包可以通过依赖的方式引入,构建项目的时候从Maven仓库下载即可. 1. 依赖配置    依赖可以声明 ...

  5. (转)Maven实战(六)依赖

    我们项目中用到的jar包可以通过依赖的方式引入,构建项目的时候从Maven仓库下载即可. 1. 依赖配置    依赖可以声明如下: <project> ... <dependenci ...

  6. 读书笔记-《Maven实战》-2018/4/17

    第五章 坐标和依赖 1.如同笛卡尔坐标系一样,Maven也通过坐标三元素定位一个资源. <groupId>com.dengchengchao.test</groupId> &l ...

  7. Maven实战系列文章目录

    Maven实战(一)安装与配置 Maven实战(二)构建简单Maven项目 Maven实战(三)Eclipse构建Maven项目 Maven实战(四)生命周期 Maven实战(五)坐标详解 Maven ...

  8. maven实战系列

    Maven实战(一)安装和配置 Maven实战(二)构建简单Maven项目 Maven实战(三)Eclipse构建Maven项目 Maven实战(四)生命周期 Maven实战(五)坐标详解 Maven ...

  9. 《Maven实战》

    原创作者: 许晓斌   阅读:61148次   评论:19条   更新时间:2011-06-23     你是否早已厌倦了日复一日的手工构建工作?你是否对各个项目风格迥异的构建系统感到恐惧?Maven ...

随机推荐

  1. http 状态

    用户如果向您的服务器发出了某项请求要求显示您网站上的某个网页(例如,当用户通过浏览器访问您的网页或在 Googlebot 抓取该网页时),那么,您的服务器会返回 HTTP 状态代码以响应该请求.此状态 ...

  2. Problem J: 求个最大值

    Problem J: 求个最大值 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 871  Solved: 663[Submit][Status][Web ...

  3. nohup和&后台运行,查看占用端口进程

    1.nohup 用途:不挂断地运行命令. 语法:nohup Command [ Arg - ] [ & ] 无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup ...

  4. mysql 读写分离

    常见的读写分离方案:1)Amoeba读写分离2)MySQL-Proxy读写分离3)基于程序读写分离(效率很高,实施难度大,开发改代码) 2)原理 web 访问数据库,通过proxy4040端口作为转发 ...

  5. js中的break,continue和return到底怎么用?

    为什么要说个?好像很简单,但是我也会迷糊,不懂有时候为什么要用return,然而break和continue也经常和他放在一起. 所以就一起来说一说,这三个看起来很简单,却常常会出错的关键词的具体用法 ...

  6. 准备冲锋 golang入坑系列

    史前摘要: 本来想写读前必读,但连续几篇博文都写读前必读,感觉就没有了新意. 所以换成史前摘要,反正是一个意思. 此摘要的目的仍然是提醒点击而来的同学,本系列最新文章在这里.放到博客园的目的是为了方便 ...

  7. [DFS遍历图]UVA10562 Undraw the Trees

    传送门: 1. UVA - 10562 2. Vjudge [看图写树]     将题目中给出的树改写为 括号表示法 即 (ROOT (SON1(...) (SON2(...)...(SONn(... ...

  8. Unity塔防游戏开发

    Unity3D塔防开发流程 配置环境及场景搭建编程语言:C#,略懂些许设计模式,如果不了解设计模式,BUG More开发工具:Unity3D编辑器.Visual Studio编译器开发建议:了解Uni ...

  9. static,final,包,访问修饰符,内部类

    static 关键字可以修饰成员变量,被static修饰的成员变量归属于类static关键字可以修饰成员方法:被static修饰的成员方法可以直接使用类名调用,也可以通过对象调用,建议使用类名.非静态 ...

  10. epoll 惊群处理

    #include <sys/types.h> #include <sys/socket.h> #include <sys/epoll.h> #include < ...