[Maven实战](7)坐标
在maven为这些构件引入坐标概念之前,我们无法使用不论什么一种方式来唯一标识全部这些构件。
因此,当须要用到Spring Framework依赖的时候。我们通常会去Spring Framework官网寻找;当用到log4j依赖的时候。我们又会去Apache官网去寻找。这样,我们花费了大量的时间在搜索。浏览网页上。
反复的搜索,浏览网页和下载jar文件。这应该交给机器去完毕。机器工作必须基于提前定义的规则。
如今。仅仅要我们提供正确的坐标元素,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会在须要的时候去那里下载。
<groupId>com.sjf.mavendemo</groupId>
<artifactId>maven-hello-world</artifactId>
<version>1.0.0SNAPSHOT</version>
<packaging>jar</packaging>
- 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。这样。附属构件也就拥有了自己唯一的坐标。
[Maven实战](7)坐标的更多相关文章
- Maven实战06_坐标和邮件服务模块
1:何为Maven坐标 为了能够自动化地解析任何一个Java构件,Maven就必须要将其唯一标识,这就是依赖管理的底层基础--坐标. 学过数学的人都知道平面直角坐标系,x,y分别为其横,纵坐标,将会在 ...
- Maven实战(六)依赖
我们项目中用到的jar包可以通过依赖的方式引入,构建项目的时候从Maven仓库下载即可. 1. 依赖配置 依赖可以声明如下: <project> ... <dependenci ...
- Maven实战之Quick Start
Introduction Maven是一个异常强大的构建工具,能够帮我们自动化构建过程,从清理.编译.测试到生成报告,再到打包和部署.通过Maven,我们只需要输入简单的命令(如mvn clean i ...
- Maven实战五
转载:http://www.iteye.com/topic/1123232 我们项目中用到的jar包可以通过依赖的方式引入,构建项目的时候从Maven仓库下载即可. 1. 依赖配置 依赖可以声明 ...
- (转)Maven实战(六)依赖
我们项目中用到的jar包可以通过依赖的方式引入,构建项目的时候从Maven仓库下载即可. 1. 依赖配置 依赖可以声明如下: <project> ... <dependenci ...
- 读书笔记-《Maven实战》-2018/4/17
第五章 坐标和依赖 1.如同笛卡尔坐标系一样,Maven也通过坐标三元素定位一个资源. <groupId>com.dengchengchao.test</groupId> &l ...
- Maven实战系列文章目录
Maven实战(一)安装与配置 Maven实战(二)构建简单Maven项目 Maven实战(三)Eclipse构建Maven项目 Maven实战(四)生命周期 Maven实战(五)坐标详解 Maven ...
- maven实战系列
Maven实战(一)安装和配置 Maven实战(二)构建简单Maven项目 Maven实战(三)Eclipse构建Maven项目 Maven实战(四)生命周期 Maven实战(五)坐标详解 Maven ...
- 《Maven实战》
原创作者: 许晓斌 阅读:61148次 评论:19条 更新时间:2011-06-23 你是否早已厌倦了日复一日的手工构建工作?你是否对各个项目风格迥异的构建系统感到恐惧?Maven ...
随机推荐
- 强大又简单的响应式框架——Foundation 网格系统
前端框架——Foundation 简介 Foundation 用于开发响应式的 HTML, CSS and JavaScript 框架. Foundation 是一个易用.强大而且 ...
- express的学习,与使用
最近在学习vue的一个实战项目,碰到一个express,当时很萌,就随便看了看................ expres是基于node 的一个web框架, 首先可以找到它的官网照着学习 这里只讲一 ...
- Python-psutil模块
psutil 1.简单介绍 psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等) ...
- Oracle.DataAccess.Client.OracleCommand”的类型初始值设定项引发异常。
Oracle.DataAccess.Client.OracleCommand”的类型初始值设定项引发异常. 64位系统下,部署32位odp.net,出现问题.解决方法:卸载32位xcopy odt.n ...
- 在64位Win7环境+64位JDK下,运行64位Eclipse,提示“Failed to load the JNI shared library”错误,提示jvm.dll不对
-startup plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar --launcher.library plugins/org.ecl ...
- EasyNVR-流媒体服务详解
1.什么是流媒体 所谓流媒体是指采用流式传输的方式在Internet播放的媒体格式. 流媒体又叫流式媒体,它是指商家用一个视频传送服务器把节目当成数据包发出,传送到网络上. 2.Eas ...
- 模仿J2EE的session机制的App后端会话信息管理
此文章只将思想,不提供具体完整实现(博主太懒,懒得整理),有疑问或想了解的可以私信或评论 背景 在传统的java web 中小型项目中,一般使用session暂存会话信息,比如登录者的身份信息等.此机 ...
- java面向对象整理
1.局部变量与全局变量的区别 区别一:定义的位置不同 定义在类中的变量是成员变量 定义在方法中或者{}语句里面的变量是局部变量定义 区别二:在内存中的位置不同 成员变量存储在对内存的对象中 局部变量存 ...
- Python [习题] 字典扁平化
习题: 将以下字典扁平化,输出为 target 字典格式source = {'a': {'b': 1, 'c': 2}, 'd': {'e': 3, 'f': {'g': 4}}}target = { ...
- Android音视频通话过程中最小化成悬浮框的实现(类似Android8.0画中画效果)
关于音视频通话过程中最小化成悬浮框这个功能的实现,网络上类似的文章很多,但是好像还没看到解释的较为清晰的,这里因为项目需要实现了这样的一个功能,今天我把它记录下来,一方面为了以后用到便于自己查阅,一方 ...