为什么需要搭建私有仓库?
在企业开发的过程中,不是所有公司都能直接访问外网。在这种情况下,就需要在局域网内找一台有外网访问权限的服务器,搭建Nexus私服仓库,开发人员连接到这台私服上,通过搭建的Nexus私服访问远程仓库。
并且,我们要知道,内网的速度,是不同于外网,外网可能会受到公开网络的攻击,并且传输速度也远低于内网。
其次,我们需要上传第三方Jar包到maven仓库,若上传至公网,数据会有泄露的风险,若在私服,数据安全性会大大提高!
Nexus简介
Nexus是Sonatype公司的一款用于搭建私服的产品,使用非常广泛。
在早期,我们都拿Nexus当maven私服仓库,后来,随着版本的不断更新,它支持的数据类型越来越多,比如npm仓库,nuget仓库,ruby仓库,docker镜像仓库等等。
Nexus主要分为2.x和3.x两个大版本,而且这两大版本相互不影响,并且都在不断更新迭代。但是其功能大致相同!!
安装包下载网址:
Download Nexus Repository OSS | SonatypeDownload Nexus Repository OSS - the world's first & only universal repository solution that's FREE to use & provides cutting-edge support for multiple formats.https://www.sonatype.com/products/sonatype-nexus-oss-download
历史版本查看网址:
Download Archives - Repository Manager 3https://help.sonatype.com/en/download-archives---repository-manager-3.html
安装
安装版本:nexus-3.58.1-02
因为Nexus是java写的,这里需要配置java的环境变量,需要java8版本及以上
解压缩
解压后是两个文件
nexus-3.58.1-02是nexus的运行程序
sonatype-work是nexus的工作空间,仓库文件存储位置
可以在nexus-3.58.1-02的bin目录下 nexus.vmoptions文件,查看nexus的配置
主要是对Nexus运行时的一些配置信息,如内存使用,日志存储文件位置,数据存储目录等,可根据服务器情况,动态调整,我们可以发现其默认配置的数据存储目录,就是在解压后的另一个文件夹sonatype-work中
可以在nexus-3.58.1-02的etc目录下,查看nexus的启动配置信息
这里可以对Nexus启动监听的ip地址和端口进行配置,可以看出Nexus使用的是轻量级的jetty来提供Http服务的
(1)使用管理员身份打开cmd命令行,然后进入到解压后的\nexus-3.58.1-02\bin该目录下
(2)执行安装nexus服务命令:nexus.exe /install
(3)执行启动nexus服务命令:nexus.exe /start
(4)执行启动nexus控制台服务命令:nexus.exe /run
补充一下停止服务和卸载服务的命令:
停止服务:nexus.exe /stop
卸载服务:nexus.exe /uninstall
第一次进入界面可能有一点慢
这边需要你先登录一下,登录之后,很多东西就可以用了
第一次登录在对应目录下找到初始密码,然后更改密码
开启匿名访问
禁止匿名访问
图说详解
Repositories
仓库管理。这里可以看到nexus的所有仓库
仓库主要分为三种类型:
- proxy,代理仓库,也就是对外部仓库的代理,这个仓库是只读的,当PC端访问Nexus库,没有依赖的时候,会请求proxy库配置的远程仓库,如远程仓库有,会下载到nexus(一个人从远程中央仓库下载好了依赖,其他人再次访问,无需访问远程仓库,直接从nexus可以获取),然后才会将nexus的返回给PC端。默认使用的maven的仓库,访问速度比较慢,可以跟换国内大型镜像仓库(比如阿里,腾讯等等,阿里nexus仓库地址:http://maven.liyun.com/repository/public);
- hosted,本地托管仓库,也就是所谓私库了,可以上传本地jar包到这个仓库。在创建的时候,需要注意:将Deployment policy改成Allow Redeploy (允许重复发布,覆盖同版本的jar包);
- group,仓库组,这是一个容器,它可以包含多个proxy,hosted或者其他group仓库,它的作用就是让开发人员引用的时候只需填一个URL,访问配置在该group下所有的库,这也是只读的。
hosted仓库存储类型分为三种:
- snapshot,存储快照(未发布的版本)。
- releases,存储发布的版本,
- mixed,混合存储模式。
这里演示,创建一个本地仓库
Blob Stores
配置本地数据存储,或者云存储 (一般都是本地存储)
可以查看所有我们创建的blob存储,以及该blob数据信息;
可以创建自己的blob;
可以查看官方blob的使用文档;
创建一个存储
Proprietary Repositories
为了帮助依赖关系混淆攻击,请识别包含专有组件的托管存储库。
在刚创建的存储下创建一个本地仓库
public
proxy
https://maven.aliyun.com/repository/publichttps://maven.aliyun.com/repository/public也可以自己创建一个代理
结合Idea演示
项目配置(切记一定不要中文名,因为中文名有的时候会乱码)
setting.xml配置
<server>
<id>自定义</id>
<username>账号</username>
<password>密码</password>
</server>
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups>
</pluginGroups>
<proxies>
</proxies>
<servers>
<server>
<id>coldwind</id>
<username>admin</username>
<password>admin</password>
</server>
</servers>
<mirrors>
<mirror>
<id>coldwind</id>
<name>cw</name>
<mirrorOf>*</mirrorOf>
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
<!--
<mirror>
<id>ali</id>
<name>ali Maven</name>
<mirrorOf>*</mirrorOf>
<url>https://maven.aliyun.com/repository/public/</url>
</mirror>
-->
</mirrors>
<profiles>
</profiles>
<activeProfiles>
</activeProfiles>
</settings>
需将项目指定setting文件,
或直接copy到本地idea仓库默认路径下
项目配置,Maven项目先配置上传URL
<distributionManagement>
<repository>
<id>coldwind</id>
<name>hoau release repository</name>
<url>http://localhost:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>coldwind</id>
<name>hoau snapshot repository</name>
<url>http://localhost:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
本地项目打包
version默认为public,如果指定快照则加上如上代码
雀实是我们刚刚上传的
下载xml配置
<repositories>
<repository>
<id>coldwind-repo</id> <!-- 可以自定义 -->
<name>coldwind-repo</name>
<url>http://localhost:8081/repository/maven-public/</url> <!-- 通过public去下载依赖 -->
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
添加引用
<dependency>
<groupId>com.coldwind</groupId>
<artifactId>decrypt</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
刷Maven新项目
下载成功
现在就可以在另外一个项目使用这个包了