Maven构建、坐标、仓库、私服、镜像的概念

前言

Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建依赖管理。Maven 这个单词的本意是:专家,内行。读音是[‘meɪv(ə)n]或[‘mevn]。

一、什么是构建

构建并不是创建,创建一个工程并不等于构建一个项目。要了解构建的含义我们应该由浅入深的从
以下三个层面来看:
①纯 Java 代码
大家都知道,我们 Java 是一门编译型语言,.java 扩展名的源文件需要编译成.class 扩展名的字节码文件才能够执行。所以编写任何 Java 代码想要执行的话就必须经过编译得到对应的.class 文件。
②Web 工程
当我们需要通过浏览器访问 Java 程序时就必须将包含 Java 程序的 Web 工程编译的结果“拿”到服务器上的指定目录下,并启动服务器才行。这个“拿”的过程我们叫部署。
Web 工程和其编译结果的目录结构对比见下图:

③实际项目
在实际项目中整合第三方框架,Web 工程中除了 Java 程序和 JSP 页面、图片等静态资源之外,还包括第三方框架的 jar 包以及各种各样的配置文件。所有这些资源都必须按照正确的目录结构部署到服务器上,项目才可以运行。
所以综上所述:构建就是以我们编写的 Java 代码、框架配置文件、国际化等其他资源文件、JSP 页
面和图片等静态资源作为“原材料”,去“生产”出一个可以运行的项目的过程。那么项目构建的全过程中都包含哪些环节呢?

二、构建过程的几个环节

清理:删除以前的编译结果,为重新编译做好准备。
编译:将 Java源程序编译为字节码文件。
测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
报告:在每一次测试后以标准的格式记录和展示测试结果。
打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web工程对应 war 包。
安装:在 Maven 环境下特指将打包的结果——jar 包或 war 包安装到本地仓库中。
部署:将打包的结果部署到远程仓库或将 war 包部署到服务器上运行。

三、Maven的约定目录结构

约定的目录结构对于Maven实现自动化构建而言是必不可少的一环,就拿自动化编译来说,Maven必须能找到Java源文件,下一步才能编译,而编译之后也必须有一个准确的位置保持编译得到的字节码文件。
我们在开发中如果需要让第三方工具或框架知道我们自己创建的资源在哪,那么基本上就是两种方式:
通过配置的形式明确告诉它
基于第三方工具或框架约定

Maven构建、坐标、仓库、私服、镜像的概念的照片 - 3
Maven对工程目录结构要求就属于后面一种
现在JavaEE开发领域普遍认同一个观点:约定>配置>编码。意思就是能用配置解决的问题就不编码。能基于约定的就不进行配置。而Maven正是因为制定了特定文件保存的目录才能够对我们的Java工程进行自动化构建。

四、Maven坐标

在Maven世界中任何一个依赖、插件或者项目构建的输出都可以称为构件,任何一个构件都有一个坐标作为唯一的标识。
这个坐标就是:groupId、artifactId、version
groupId:公司或组织的域名倒序+当前项目名称
artifactId:当前项目的模块名称
version:当前模块的版本

<groupId>com.queen.web</groupId>
<artifactId>queen-web</artifactId>
<version>1.0.0-SNAPSHOT</version>

根据这个坐标就可以定义其在仓库的唯一存储路径,那么就可以在项目中引用。
将groupId、artifactId、version三个连起来
com.queen.web+queen-web+1.0.0-SNAPSHOT
以连接起来的字符串作为目录结构去仓库中查找
com/queen/web/queen-web/1.0.0-SNAPSHOT/queen-web-1.0.0-SNAPSHOT.jar
注意:我们自己的Maven工程必须执行安装操作才会进入仓库,安装命令:mvn install

五、Maven仓库

Maven仓库是基于简单文件系统存储的,只要在文件系统中没有发现相关的文件,说明这几依赖并不存在,因此,我们很容易在本地仓库查找具体的依赖是否存在。
Maven仓库分为两种:本地仓库和远程仓库
本地仓库就是我们自己机器上的文件系统,所以他是唯一的,项目构建时首先在本地仓库查找依赖,如果本地没有依赖时才会去寻找远程仓库。本地仓库设置可以参照<<Eclipse中如何安装Maven插件>>进行设置。
远程仓库指的是非本地的其他所有仓库,中央仓库、私服等都是远程仓库的一种。如果本地仓库没有项目构建需要的构件,你们就会从远程仓库下载,可是远程仓库如果也没有的话,你们就会项目报错。

六、Maven私服

私服是一种特殊的远程仓库,他是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven需要下载构件的时候,它从私服请求,如果私服上不存在改构件,则从外部的远程仓库下载,同时缓存在私服之上,然后为Maven下载请求提供服务,另外,对于第三方的jar无法从仓库下载(JDBC驱动),可以从本地上传到私服供客户端下载。
优点主要有:
①节省外网宽带
②加速Maven构建
③部署第三方构件
④提高稳定性、增强控制:原因是外网不稳定
⑤降低中央仓库的负荷:原因是中央仓库访问量太大

七、Maven镜像

如果仓库A可以提供仓库B存储的所有内容,那么就可以认为A是B的一个镜像,某些情况下使用镜像可以提高项目构建效率。
settings.xml 中配置镜像

<mirror>
      <id>mirrorId</id>
      <mirrorOf>repositoryId</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://my.repository.com/repo/path</url>
</mirror>

镜像的意思是,当你访问mirrors的仓库时,就会转到对应的镜像url中请求对应的资源。一般镜像都是和私服结合使用。由于私服可以代理任何外部的公共仓库(包括中央仓库),因此,对于组织内部的Maven用户来说,使用一个私服地址就等于使用了所有需要的外部仓库,这个可以将配置集中到私服,从而简化Maven本身的配置。在这种情况下,任何需要的构件都可以从私服中获得,私服就是所有仓库的镜像。

<mirror>
	<id>nexus-aliyun</id>
	<mirrorOf>*</mirrorOf>
	<name>Nexus aliyun</name>
	<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

 

博客地址:http://www.marsitman.com/maven/maven_build_store_gav_mir.html

猜你喜欢

转载自blog.csdn.net/baidu_35761016/article/details/80564518