Nexus3是一个仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问。
平常我们在获取maven仓库资源的时候,都是从maven的官方(或者国内的镜像)获取,但是这都不是最好的方案,假如在同一个环境内,一个团队的多个开发人员同样的依赖都要从远程获取一遍,从网络方面来说,这是非常耗时的。这时候就需要在局域网内部署一个Nexus用来管理Maven(apt、yum、gradle、pypi、docker等等)仓库。
Nexus支持:
- Nexus在代理远程仓库的同时维护本地仓库,以降低中央仓库的负荷,节省外网带宽和时间,Nexus私服就可以满足这样的需要。
- Nexus是一套“开箱即用”的系统不需要数据库,它使用文件系统加Lucene来组织数据。
- Nexus使用ExtJS来开发界面,利用Restlet来提供完整的REST APIs,通过m2eclipse与Eclipse集成使用。
- Nexus支持WebDAV与LDAP安全身份认证。
- exus还提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的REST客户端,它占用较少的内存,基于简单文件系统而非数据库。
- …
使用Nexus的好处:
- 节省宽带
- 加速构建
- 节省中央maven仓库的带宽
- 稳定
- 控制和审计
- 能够部署第三方依赖
- 可以建立本地内部仓库
- 可以建立公共仓库
- …
Nexus参考资料:
一、Nexus的安装
为了便捷,这里直接使用Docker-Compose的方式进行安装
1.1 创建docker-compose.yml
version: '3.2' services: nexus3: image: sonatype/nexus3 container_name: nexus3 ports: - 19921:8081 volumes: - /datahub/nexus3_data:/nexus-data
把服务器的文件映射到本地,使其可以持久化使用。
这里我修改了映射出来的端口,根据需要自行修改即可。
1.2 启动nexus
使用docker-compose up -d
启用nexus,启动完成后,我们可以访问其环境。
https://mirrors.ruoxisoft.org (我这里使用nginx反代了本地的19921端口)
用户名是admin,密码在/datahub/nexus3_data/admin.password
里面。
二、添加Gradle代理
默认情况maven无法代理gradle,我们需要添加gradle代理,然后再添加到maven的maven-public里面,这样我们使用maven-public的时候就会自动代理。gradle了。
2.1 添加gradle代理
Repository->Repositories->Create repository->选择Maven2(proxy)
然后输入name和remote storage,即输入名字和远程仓库地址,gradle的远程仓库地址为https://jcenter.bintray.com
2.2 然后把配置好的jcenter-central
添加到maven-public
里面
这样,以后再配置gradle的时候就直接写maven-public就可以了。
三、添加NPM代理
3.1 创建NPM Proxy
Repository->Repositories->Create repository->选择npm(proxy)
代理地址为:https://registry.npmjs.org/

其实这个时候如果不添加私有代码相关内容,这个时候已经可以了,可以直接跳转到本小节的最后一步,下面的步骤可选。
3.2 创建npm-releases
和npm-snapshots
Repository->Repositories->Create repository->选择npm(hosted)
输入名字后,直接保存即可。
创建这两个的方法都是一样的,这里不进行多次重复演示了。但是需要注意一点,如下图:
如果是需要上传的话,这个地方要选择第一个allow redeploy
否则是没有办法上传私有依赖的。
四、example、修改仓库示例
Maven仓库修改示例
修改~/.m2/setting.xml
在 <mirrors>...</mirrors>
中添加如下内容
<mirror> <id>ruoxisoft</id> <mirrorOf>*</mirrorOf> <name>RuoxiSoft</name> <url>https://mirrors.ruoxisoft.org/repository/maven-public/</url> </mirror>
Gradle仓库修改示例
编辑~/.gradle/init.gradle
修改为如下内容
gradle.projectsLoaded { rootProject.allprojects { buildscript { repositories { def REPOSITORY_URL = 'https://mirrors.ruoxisoft.org/repository/maven-public/' all { ArtifactRepository repo -> if (repo instanceof MavenArtifactRepository) { def url = repo.url.toString() if (url.startsWith('https://repo1.maven.org/maven2/') || url.startsWith('https://jcenter.bintray.com/')) { project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL." println("buildscript ${repo.url} replaced by $REPOSITORY_URL.") remove repo } } } jcenter { url REPOSITORY_URL } maven{ url REPOSITORY_URL } } } repositories { def REPOSITORY_URL = 'https://mirrors.ruoxisoft.org/repository/maven-public/' all { ArtifactRepository repo -> if (repo instanceof MavenArtifactRepository) { def url = repo.url.toString() if (url.startsWith('https://repo1.maven.org/maven2/') || url.startsWith('https://jcenter.bintray.com/')) { project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL." println("allprojects ${repo.url} replaced by $REPOSITORY_URL.") remove repo } } } jcenter { url REPOSITORY_URL } maven{ url REPOSITORY_URL } } } }
NPM仓库修改示例
编辑文件~/.npmrc
添加如下内容
registry=https://mirrors.ruoxisoft.org/repository/npm-public/
Pypi仓库修改示例
编辑文件~/.pip/pip.conf
添加如下内容
[global] index = https://mirrors.ruoxisoft.org/repository/pypi-public/pypi index-url = https://mirrors.ruoxisoft.org/repository/pypi-public/simple trusted-host = mirrors.ruoxisoft.org
GO仓库修改示例
# 启用 Go Modules 功能 go env -w GO111MODULE=on # 设置Nexus3的GO源 go env -w GOPROXY=https://mirrors.ruoxisoft.org/repository/go-public,direct # 确认下结果 go env | grep GOPROXY #> GOPROXY="https://mirrors.ruoxisoft.org/repository/go-public,direct"
Yum修改示例
sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \ -e 's|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.ruoxisoft.org/repository/yum-public|g' \ -i.bak \ /etc/yum.repos.d/CentOS-*.repo