Maven仓库介绍以及私服搭建
1 什么是Maven?
1.1 Maven的概念
Maven主要服务于基于Java平台的项目构建、依赖管理和项目信息开发,它是一个异常强大的构建工具,能够帮助我们自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署。
1.2 Maven的优点
1.2.1 便捷
使用Maven最大的一点优点就是便捷。构建项目时,开发者无需一遍又一遍地输入命令,一次又一次地点击鼠标,我们需要做的就是输入Maven的简单命令,Maven会帮我们处理那些繁琐的任务。
1.2.2 标准化构建方式
在使用Maven之前,多个项目可能有多种构建方式;使用Maven之后,多个项目的构建方式被统一起来,这样极大地避免了不必要的学习成本,而且有利于项目团队的标准化。
1.2.3 提供中央仓库
Maven不仅仅是构建工具,它还是一个依赖管理工具和项目信息管理工具。它提供有公共的中央仓库,只要我们提供项目所需构件的“坐标”,Maven能帮助我们自动下载,省去手工寻找的时间成本。
2 什么是Maven仓库
2.1 Maven仓库的概念
在Maven的世界中,任何一个依赖、插件或者项目构建的输出,都可以被称为构件,每一个构件都有其唯一的坐标标识(主要包含groupId、artifactId、version)。根据坐标标识,任何Maven项目使用任何一个构件的方式是完全相同的。在此基础上,Maven可以在某个位置统一存储所有Maven项目共享的构件,这个统一的位置就是Maven仓库。
实际的Maven项目将不再各自存储其依赖文件,它们只需要声明这些依赖的坐标,在需要的时候(编译项目时),Maven会自动根据坐标找到仓库中的构件并使用它们。
2.2 Maven仓库的分类
2.2.1 本地仓库
本地仓库即存储在本机磁盘中的某个文件夹,Maven下载的构件都存储在该文件夹下。在安装Maven软件后,默认情况下在用户目录下都有一个路径为“.m2/repository/”的仓库目录,目录路径类似如下形式:“C:\Users\xxx\.m2\repository\”,另外开发者可编辑Maven安装目录下“conf”文件夹中的“settings.xml”文件,在其中设置本地仓库的路径。具体的设置并不是本文重点,在此不加以描述,读者可请自行百度。
2.2.2 远程仓库
顾名思义,远程仓库即是存储在远端服务器中的某个文件夹,该文件夹存储构件以供开发者进行下载,Maven就自带其中央仓库,我们可点击如下地址进行该仓库构件的查询https://mvnrepository.com/。
2.3 Maven构件下载顺序
当Maven根据坐标寻找构件时,会优先查看本地仓库,如果本地仓库存在此构件,则直接使用;如果本地仓库不存在此构件,或者需要查看是否有更新的构件版本,Maven就会去远程仓库去查找,发现所需构件后,将其下载到本地再使用。
3 Maven私服
3.1 Maven私服的概念
私服是一种特殊的远程仓库,为了节省带宽和时间,大多数公司会选择在局域网中架设一个私有的仓库服务器,用其代理所有外部的远程仓库。内部的项目还可以部署到私服上以供其他项目使用。当Maven下载构件时,它从私服请求,若私服不存在此构件,Maven则从远程仓库查找并存储到私服中,在从私服中请求下载构件。此外,一些无法从外部仓库下载到的构件也能从本地上传到私服仓库中供大家使用。以下给出示例图。

3.2 建立私服的好处
3.2.1 节省带宽
建立私服可以减少组织自己的开支,大量的对于外部仓库的重复请求会消耗很大的带宽,利用私服代理外部仓库之后,对外的重复构件下载便得以消除,即降低外网带宽的压力。
3.2.2 加速Maven构建
不停地连接请求外部仓库是十分耗时的,但是Maven的一些内部机制(如快照等更新检查)要求Maven在执行构建时不停地检查远程仓库。因此当项目配置了很多远程仓库时,构建的速度会大大降低。使用私服可以很好地解决该问题,Maven只需检查局域网中私服的数据,项目构建速度得到提高。
3.3.3 部署第三方构件
当某个构件无法从任何一个外部远程仓库获得,怎么办?建立私服之后,用户可以将这些构件部署到该仓库中,供内部的Maven项目使用。
3.3.4 提高稳定性,增强控制
Maven构建高度依赖远程仓库,因此,当外网连接不稳定时(如公司网络出现问题、远程仓库需要维护无法连接等),Maven构建会变得极其不稳定,甚至无法成功构建项目。建立私服后,即使暂时没有外网连接,由于私服中已经缓存了大量的构件,Maven仍然可以正常构建项目。另外一些私服软件提供了很多额外的功能,如权限管理、版本区分等,管理员可以对仓库进行一些更高级的控制。
4 构建Maven私服
4.1 选择搭建工具
搭建Maven私服的工具有三种:Apache基金会的Archiva、JFrog的Artifactory和Sonatype的Nexus。其中Archiva是完全开源的,因此我建议选择该软件进行私服的搭建。
4.2 JDK的下载和安装
Archiva的应用启动需要用户提前安装jdk,关于jdk的下载和安装本文不再描述,请读者自行百度。
4.3 Archiva的下载和安装
点击如下地址进入其官网地址:http://archiva.apache.org/index.cgi,在该页面中找到“Download Archiva”按钮,选择zip文件进行下载,如下图:


下载完成后解压该文件,将其中的“apache-archiva-xxx”文件夹放到某个磁盘目录下,其中该文件夹根目录下conf文件夹中的“jetty.xml”可以设置应用启动的端口,具体设置详情请百度。
4.4 启动服务
(1) 使用“管理员身份运行cmd” (开始菜单的附件中),进入软件安装目录中bin目录;
C:\Windows\system32>cd D:\Program Files\apache-archiva-2.2.1\bin
C:\Windows\system32>D:
(2)输入命令“archiva.bat install”,命令运行正常则会输出“wrapper | Apache Archiva installed.”;
E:\Program Files\apache-archiva-2.2.1\bin>archiva.bat install
wrapper | Apache Archiva installed.
(3)输入命令“archiva.bat start”,命令运行正常则会输出“wrapper | Starting the Apache Archiva service...、wrapper | Apache Archiva started.”;
E:\Program Files\apache-archiva-2.2.1\bin>archiva.bat start
wrapper | Starting the Apache Archiva service...
wrapper | Apache Archiva started.
4.5 访问服务网页
打开浏览器,在地址栏中输入http://host:port(具体的host和port用户自行指定),进入到软件管理GUI页面,第一次访问时,用户可创建一个管理员账户。

用户登录成功后,页面左侧菜单栏罗列出软件全部功能菜单,用户可根据需要进行相关的配置。关于Archiva的各项配置说明,请读者自行百度。

4.6 下载和上传构件
4.6.1 下载构件
4.6.1.1 配置本地Maven的settings.xml
(1)配置同服务器的认证信息
在<servers>标签下新建一个<server>标签,在该标签下新建子标签<id>、<username>、<password>,其中id 是要认证的服务器名称,可以配置多个。它是用来标记服务器的,要唯一;username和password是登录私服服务器所需用户名和密码。如果要连接多个私服,可以类似地配置多个 server,每个 server 是一个私服的认证信息。
(2)配置要连接的私服信息
在<mirrors>标签下新建一个<mirror>标签,在该标签下新建子标签<id>、<mirrorOf>、<name>、<url>,其中id 是私服映射的标记,该标记要同 server 中的 id 一样,如果连接私服需要认证信息,Maven 可以通过 id 找对应的 server,用 server 的认证信息进行认证;mirrorOf的值设置为“*”,表示匹配所有远程仓库,name为该私服仓库的名称,可随意取,方便自己记忆和理解就好;url为该私服仓库的url地址,值为http://host:port/repository/仓库id(该值为默认值,用户可以修改);

4.6.1.2 创建Maven项目
使用上述配置的settings.xml的Maven工具创建Maven项目,接下来的添加依赖和之前的添加方式并无区别,至此私服搭建完毕并可以使用。
4.6.2 上传构件
4.6.2.1 配置Maven项目的pom文件
在project标签内,添加<distributionManagement>标签,指定要发布的目标地(私服)。具体内容如下:
<distributionManagement>
<repository>
<id>archivaServer(仓库id)</id>
<url>http://localhost:8080/repository/internal(仓库地址)</url>
</repository>
<snapshotRepository>
<id>archivaServer(仓库id)</id>
<url>http://localhost:8080/repository/snapshots(仓库地址)</url>
</snapshotRepository>
</distributionManagement>
上面的信息配置了两个仓库 url,一个是 repository;另一个是快照 repository。每个 repository 中都有一个 url。
4.6.2.2 运行发布命令
运行Maven的deploy命令,Maven会自动编译和打包项目,并将其发布到私服仓库中。发布完毕后,开发者即可随心所欲使用该构件。

Maven仓库介绍以及私服搭建的更多相关文章
- maven仓库介绍
maven仓库介绍 http://juvenshun.iteye.com/blog/359256
- Maven Nexus3 安装,私服搭建
为啥搭建Maven私服? 如果没有私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地,而一个团队中的所有人都重复的从maven仓库下载构件无疑加大了仓库的负载和浪 ...
- ava Maven项目之Nexus私服搭建和版本管理应用
目录: Nexus介绍 环境.软件准备 Nexus服务搭建 Java Maven项目版本管理应用 FAQ 1.Nexus介绍 Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维 ...
- Java Maven项目之Nexus私服搭建和版本管理应用
转载自:https://cloud.tencent.com/developer/article/1010603 1.Nexus介绍 Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓 ...
- maven仓库介绍《本地仓库、远程仓库》
在Maven中,任何一个依赖.插件或者项目构建的输出,都可以称之为构件.Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库.(仓库就是存放依赖和插件的地方)任何的构件 ...
- 如何将本地jar包放入本地maven仓库和远程私服仓库
1.将本地jar包放入本地仓库.只需执行如下命令即可: mvn install:install-file -Dfile=D:/demo/fiber.jar -DgroupId=com.sure -Da ...
- 使用nexus搭建maven仓库(本地私服)
我们在使用maven的时候,对于项目所依赖的jar包,maven默认会在中央仓库下载jar包,到本地的磁盘目录(如果没有配置则是用户目录下/.m2/repository文件夹下).如果公司内部搭了一个 ...
- (三)Maven仓库介绍与本地仓库配置
1.Maven本地仓库/远程仓库的基本介绍 示意图: 本地仓库是指存在于我们本机的仓库,在我们加入依赖时候,首先会跑到我们的本地仓库去找,如果找不到则会跑到远程仓库中去找.对于依赖的包大家可以从这个地 ...
- Maven入门----介绍及环境搭建(一)
知识点: 介绍Maven 本机搭建Maven环境 DEMO测试 本地仓库迁出 Maven简介: 百度百科: 说到底就是一个项目管理工具. 本机搭建Maven环境: Maven的环境需要jdk环境的支持 ...
随机推荐
- springboot o.a.tomcat.util.scan.StandardJarScanner : Failed to scan [file:/D:/apache-maven-3.0.5[系统找不到指定路径]
报错信息: 2019-11-04 11:05:52.404 WARN 4512 --- [ main] o.a.tomcat.util.scan.StandardJarScanner : Failed ...
- python 关键参数和默认值
def hello_key(greeting='hello', name='world'): print('%s, %s' % (greeting, name)) hello_key() hello_ ...
- Liunx之MySQL安装与主从复制
MYSQL安装(mariadb) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可. 开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL ...
- 一台服务器配置多个mysql实例
在公司资源紧张的情况下,需要在一台服务器上部署多个数据库实例,现在就来实战一下该情况. 需要启动两个不同的端口,分别是3306和3307 [root@node1 ~]# mkdir /u01/mysq ...
- 我用asp.net core 部署到docker遇到的问题
1.怎么部署 我是用文件的形式先发布出来,然后把文件拷贝到服务器上部署到docker中去. 2.端口映射 根据查找到的资料,dockerfile 是不支持指定映射服务器端口的,只能在run的时候用-p ...
- Colab 实用教程
Google Colab 是什么? Google Colab 是一个免费的云服务,现在它还支持免费的 GPU! 你可以: 提高你的 Python 语言的编码技能. 使用 Keras.TensorFlo ...
- ArcGIS超级工具SPTOOLS-影像的批量裁剪和批量合并
1.1 影像批量裁剪 操作视频: https://weibo.com/tv/v/Hw25XqOL4?fid=1034:4376345233306897 影像批量裁剪:一个影像(可以多波段,也可以单波 ...
- SpringBoot RestTemplate接收文件,并将文件发送到另外一个程序进行存储
最近有个需求,接收用户上报的证书,并且保存起来,证书大小不到1M,但该证书的保存必须在另外一个程序进行,所以想到使用springboot接收上传文件后,再通过RestTemplate将文件发送给另外一 ...
- ajax传参数json对象到后台获取
类型1 var version = $("#version").val(); var ids[i] = ("127.0.0.1","192.168.1 ...
- java中的异步处理和Feature接口(一)
背景介绍想象这样一个场景:你可能希望为你的法国客户提供指定主题的热点报道.为实现这一功能,你需要向 谷歌或者Twitter的API请求所有语言中针对该主题最热门的评论,可能还需要依据你的内部算法 对它 ...