一、私服简介
私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。
二、使用私服的好处
1、jar包下载速度比中央仓库快
2、有些jar包由于版权原因,maven中央仓库没有,比如oracle JDBC驱动。另外也会有一些项目中用到的比较老的开源jar包, 中央仓库也没用
3、公司自己开发的jar包并不开源,不能上传到maven中央仓库,只能部署到私服上面
4、便于进行统一jar包管理
5、可在此基础上搭建自动化部署服务器:1)Maven构建和释放项目;2)SubVersion源代码库,管理源代码;3)远程存储库管理器(Jfrog/ Nexus)来管理项目的二进制文件。
三、3种Maven仓库管理软件
1、Apache的Archiva
2、JFrog的Artifactory
3、Sonatype的Nexus(本文将使用)
四、安装、使用:(默认jdk和maven已经成功安装)
1、下载地址:http://www.sonatype.org/nexus/go 我安装的是nexus-2.14.0-01-bundle
2、安装:进入bin目录,我的为F:\nexus-2.14.0-01-bundle\nexus-2.14.0-01\bin\jsw\windows-x86-64,看到如下图
1)修改启动端口:默认8081,若未被占用则可不更改
2)修改本机安装的jdk路径
3)以管理员身份运行install-nexus.bat
4)以管理员身份运行start-nexus.bat
至此,nexus已经安装启动完成
3、可视化界面
1)浏览器打开http://localhost:7081/nexus/
2)右上角login in ,输入用户名:admin,密码:admin123(默认管理员初始用户名密码)
3)左侧点击Repository显示如下图所示
4)nexus仓库分类
a.hosted 宿主仓库:主要用于部署无法从公共仓库获取的构件(如 oracle 的 JDBC 驱动)以及自己或第三方的项目构件;
b.proxy 代理仓库:代理公共的远程仓库;
c.virtual 虚拟仓库:用于适配 Maven 1;
d.group 仓库组:Nexus 通过仓库组的概念统一管理多个仓库,这样我们在项目中直接请求仓库组即可请求到仓库组管理的多个仓库。
4、上传非开源或者自己的jar包到宿主库
5、设置代理仓库:
1)选择Central仓库点击下边的Configuration把Download Remote Indexes属性设为True保存
2)在Central仓库上右键然后点击Repair Index 即可下载中心仓库的索引文件,稍等几分钟点击下边的Browse Index即可看见下载的索引文件。
3)往Public Repositories中添加Central仓库,点击Public Repositories在Configuration选项卡中把Central移到左侧
6、项目中使用maven私服的两种方式
1)配置在本地maven的setting.xml中,则对于本地所有的maven项目生效
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>central</mirrorOf>
<name>central_repository</name>
<url>http://localhost:7081/nexus/content/groups/public/</url>
</mirror>
</mirrors>
2)配置在项目的pom.xml中,只针对当前项目有效
<repositories>
<repository>
<id>nexus</id>
<name>Team Nexus Repository</name>
<url>http://localhost:7081/nexus/content/groups/public</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>nexus</id>
<name>Team Nexus Repository</name>
<url>http://localhost:7081/nexus/content/groups/public</url>
</pluginRepository>
</pluginRepositories>
<dependencies>
<!-- 宿主仓库依赖测试 -->
<dependency>
<groupId>my-test</groupId>
<artifactId>my-test</artifactId>
<version>1.0.0</version>
</dependency>
<!-- 代理仓库依赖测试 -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.0</version>
</dependency>
...
3)测试结果