依赖仓库搭建
1、先安装虚拟机和Ubuntu
作为练习的话,先安装VMWare虚拟机和Ubuntu系统,安装教程参考:https://blog.csdn.net/android_cai_niao/article/details/141613028
2、下载Nexus Repository OSS
注:不是maven客户端,客户端的话官网是https://maven.apache.org/,安装非常简单。我们需要安装的是依赖存储仓库的服务器端,用于保存工件。
- Nexus Repository pro (收费版本)
- Nexus Repository oss(免费版本),官网下载地址:https://www.sonatype.com/products/sonatype-nexus-oss-download。
Nexus Repository oss
是一个具有通用格式支持的artifact repository。下载需要填写一些资料,其中163邮箱不可用,可以填Outlook邮箱,实验过可以。截图如下,这个界面也展示了免费版和收费版本的区别:
这里复制了几个官网的直接下载地址,跳过资料填写,不知道以后会不会失效:
Windows版本:
-
https://download.sonatype.com/nexus/3/latest-win64.zip
-
https://sonatype-download.global.ssl.fastly.net/repository/downloads-prod-group/3/nexus-3.71.0-06-win64.zip
Unix版本:
-
https://download.sonatype.com/nexus/3/latest-unix.tar.gz
-
https://sonatype-download.global.ssl.fastly.net/repository/downloads-prod-group/3/nexus-3.71.0-06-unix.tar.gz
如果下载不了的话也可以从源码上自己编译一个:https://github.com/sonatype/nexus-public。
另外我百度云盘上也有备份:链接:https://pan.baidu.com/s/1NX3wuGB2b_1VjzY-5ayBGw?pwd=e27x
3、安装Nexus Repository OSS
这里以安装nexus-3.70.1-02 为例。
使用Xftp,在用户目录下创建一个soft目录,用于存放安装文件,再创建一个program目录,用于安装程序。在Xftp中,可以像在Windows中一样,直接右击菜单创建即可,如下:
上传文件也很简单,直接从Widnows中拖动文件拖到Xftp的soft文件中即可,在Xftp的下方会显示上传进度,如下:
传完之后,双击soft目录进入该目录中,然后点击Xshell按钮(或者按Ctrl + Alt + T),即可打开Xshell并自动登录且进入到soft目录,如下:
如上图,画红线命令是从Xftp中跳过来是自动执行的。解压Nexus压缩包:
tar -xzvf latest-unix.tar.gz
解压后用 ls
命令查看如下:
可看到有两个文件夹,为了方便管理,我们想把他们都放到一个目录中,在之前创建的program目录中再创建一个nexus目录,然后把解压的内容移到nexus目录中,命令如下:
mkdir ~/program/nexus
mv nexus-3.70.1-02/ ~/program/nexus/
mv sonatype-work/ ~/program/nexus/
命令执行后,效果如下:
为了方便执行nexus命令,我们把nexus的bin目录配置到环境变量中,执行如下命令:
sudo vim /etc/profile
然后在文件的最后添加如下内容:
export PATH=${PATH}:/home/even/program/nexus/nexus-3.70.1-02/bin
跟Windows中的配置相似,只不过Linux中多个路径之间是用冒号隔开的,而Windows中是用分号隔开的。
输入完成后按 ESC
键,然后输入下面命令保存并退出vim:
:wq
然后再执行下面命令使修改生效:
source /etc/profile
然后再执行nexus命令,效果如下:
如上图,执行nexus命令后,提示信息为:
在您的系统上找不到合适的Java虚拟机。
JVM的版本最低为1.8,最高为17。
请定义 INSTALL4J_JAVA_HOME 以指向合适的JVM。
经实验,不定义 INSTALL4J_JAVA_HOME
也可以正常运行。
这里需要注意,我一开始安装JDK17,结果死活也运行不了Nexus,错误信息我就不提了,反正你看不出来是JDK版本的问题。最后安装JDK11发现就正常了,JDK11我的百度云盘备份:链接:https://pan.baidu.com/s/1SEkeq6_RnOBqedGXia7Iiw?pwd=909k ,具体版本为:jdk-11.0.24_linux-x64_bin.deb
把jdk上传到我们之前创建的soft目录中,如下:
如上图,上使用Xftp上传文件后,点击Xshell
按钮,执行安装命令:
sudo dpkg -i jdk-11.0.24_linux-x64_bin.deb
安装后执行java -version
查看版本,如下:
可以看到,这种方式安装,我们没有配置环境变量即可执行java命令了,之前nexus提示需要配置一个 INSTALL4J_JAVA_HOME
的环境变量,经实验不配置也可以,这里我就不配置了。如果想要配置的话,首先要知道刚刚的JDK安装到什么位置了,执行如下命令:
sudo update-alternatives --config java
执行结果如下:
如上图,可以看到安装目录位于:/usr/lib/jvm/jdk-11.0.24-oracle-x64/bin/java
,下方提示按回车保持当前带星号的选择,或者输入一个号码来进行选择。也就是说,这个命令可以列出所有安装的JDK,且可以选择要使用的JDK。update-alternatives
是一个管理不同版本 Java 的工具,所以,通过jdk.deb
文件的方式安装的JDK不需要设置JAVA_HOME
,通过update-alternatives
管理即可。
安装好JDK后,我们再次执行nexus命令,这时它会提示我们正确使用nexus的方式,如下:
nexus run
是在前台运行,所以如果有什么错误会在前台直接输出。而nexus start
则是在后台运行,如果有错误在前台是看不到的,需要到日志文件中去查看。如果是用nexus start
启动的,则可以再执行nexus status
来查看当前nexus的状态,以查看是否启动成功。
这里我们就先使用前台的方式启动,会看到启动失败,且有失败信息,如下:
把报错信息复制到ChatGPT即可找到答案,答案上说:
-Djava.endorsed.dirs 参数在较新的 Java 版本中已不再被支持。这是因为 Java 模块系统(从 Java 9 开始引入)不再支持 endorsed 机制。
所以解决方案就很简单,如果使用的JDK是Java 9
或以上的版本,删除这个参数即可。如下操作:
vim ~/program/nexus/nexus-3.70.1-02/bin/nexus.vmoptions
进入文件后按大写G直接定位到文件最后,删除最后一行保存文件即可,如下:
如上图,删除红线那行,然后保存即可。红线上面也有一行注释说:当使用Java9+时,注释掉这个虚拟机选项
。
注:更新一点的版本:nexus-3.71.0-06-unix.tar.gz
,这个版本已经没有使用-Djava.endorsed.dirs
选项了,所以我们就不需要做删除的操作了,而且这个版本要求的JDK版本必须是JDK17,也是鬼异的很!我试过了安装了jdk-17_linux-x64_bin.deb
,可以正常运行,该版本的百度云盘备份:https://pan.baidu.com/s/1dOW05cbENSfyrtbAEI9p-Q?pwd=cnqi
–来自百度网盘超级会员v4的分享
然后再次运行nexus run
命令,然后就会有很多很多的信息输出,大概十几或者二十几秒后启动完成,效果如下:
看到红色这行就表明nexus已经启动完成了。
后面我又使用了更新的版本,在我的华为云上运行,它提示我JVM内存不足:
root@hcss-ecs-e026:~# nexus run
WARNING: ************************************************************
WARNING: Detected execution as "root" user. This is NOT recommended!
WARNING: ************************************************************
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x000000078f550000, 1890254848, 0) failed; error='Not enough space' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 1890254848 bytes. Error detail: committing reserved memory.
# An error report file with more information is saved as:
# /root/program/nexus/nexus-3.85.0-03/hs_err_pid1605498.log
解决方法也是修改nexus.vmoptions
文件,把需要的内存调小即可,它在文件的最前面,如下:
默认为:
-Xms2703m
-Xmx2703m
可以调小一些,比如修改为:
-Xms512m
-Xmx512m
4、登录nexus管理页面
网页登录的用户名为:admin,默认密码保存在 sonatype-work/nexus3/admin.password
文件中 (在网页中点登录时会提示出这个路径),在Xshell
中另起一个窗口去查看密码,如下:
vim ~/program/nexus/sonatype-work/nexus3/admin.password
显示密码为:
1fb9d8d6-9649-49e6-835c-5deaea5b9feb
很复杂,所以直接复制这个密码,在Xshell中用鼠标选择密码,然后按Ctrl + Insert
键即可复制到Windows的剪贴板上。
在Windows的浏览器上访问:http://<your-server-ip>:8081
,这个页面需要加载好几秒,然后Welcome下面的三个模块内容才显示出来。如下:
点击右上角的 “Sign In” 进行登录。登录后出现设置向导,如下:
向导的第一步先是修改默认密码,如下:
这个页面的信息翻译如下:
启用匿名访问意味着默认情况下,用户可以在没有凭据的情况下从存储库搜索、浏览和下载组件。 请考虑对您的组织的安全影响。
禁用匿名访问应该谨慎选择,因为禁用后对于所有用户或构建工具它都需要凭证(credentials)。
为方便使用,这里我们选择允许匿名访问:Enable anonymos access
这里的翻译为:
设置任务完成,愉快的使用Nexus Repository Managerk吧!
5、Windows版本安装
这里我使用的是nexus-3.85.0-03-win-x86_64.zip
版本,这是当前(2025-10-12)的最新版本,发现和之前的版本还是差不多的,和Linux版本差不多,压缩包里面有nexus-3.85.0-03
目录和sonatype-work
,前一个是软件目录,后一个是工作目录,在软件目录里面还包含有jdk目录,它自带jdk17,这说明nexus是用java写的,需要用jdk来运行,nexus-3.85.0-03\bin
目录如下:
此目录包含了在 Windows 系统上运行 Nexus 仓库所需的脚本和可执行文件。而README.txt
中包含了使用说明。
5.1 在 Windows 上将 Nexus Repository 安装为服务
使用管理员权限打开CMD,然后运行:install-nexus-service.bat
。
这个命令将使用默认设置安装一个名为 SonatypeNexusRepository
的Widnows服务:
sonatype-work
将作为工作目录Nexus Repository
将使用捆绑的JDK17
运行时。
在使用中,我发现我怎么也运行不起来,在控制台中输出的错误信息中,有看到它使用了jdk1.8,于是我把JAVA_HOME设置为了jdk 17,问题依旧,设置INSTALL4J_JAVA_HOME_OVERRIDE
,问题依旧,直到卸载jdk1.8才解决问题。
5.1.1 自定义 sonatype-work 目录路径
如果您想使用不同的 sonatype-work 目录,请提供绝对路径作为参数:
install-nexus-service.bat C:\my-sonatype-work
5.1.2 自定义 Java 运行时
如果您想使用不同的 JDK,您有两个选项:
- 将环境变量
INSTALL4J_JAVA_HOME_OVERRIDE
设置为您想要使用的 JDK 的绝对路径。 - 修改
nexus.rc
文本文件,并在app_java_home
变量中指定您想要使用的 JDK 的绝对路径。
5.2 将 Nexus Repository 启动为 Windows 服务
服务安装后,您可以使用 Windows 服务控制面板来启动和停止它。
如果您需要从命令行停止服务,可以运行命令:
nexus.exe stop SonatypeNexusRepository
要从命令行启动服务,请运行命令:
nexus.exe start SonatypeNexusRepository
要卸载服务,请运行命令:
sc delete SonatypeNexusRepository
5.3 从命令行启动 Nexus Repository
如果您希望将 Nexus Repository 作为控制台应用程序运行而不是作为服务运行,在安装服务后,您可以运行命令:
nexus.exe run SonatypeNexusRepository
这将在前台启动 Nexus Repository 应用程序,您可以通过按 Ctrl+D和 Ctrl+C来停止它。可能需要多次尝试才能停止。这对于调试目的很有用,但不建议在生产环境中使用。最开始我就是在服务面板中启动服务失败,这又看不到失败的原因,所以我就使用这种方式来运行,以便看到失败的原因。
5.4 访问网页
访问:127.0.0.1:8081,用户名与密码和Linux的一样,用户名为admin,密码会提示出来保存在某个文件中,登录后需要修改。
6、仓库使用
网页登录后,在主页左侧有一个Settings按钮,如下:
点击它,然后再点击Repositories
,如下:
这里列出了所有的仓库,也可以点击Create repository
来创建一个新的仓库。
我们来看一下这些默认的仓库:
- maven-central 在Type列中可以看到,它是proxy类型,是一个代理仓库,它的仓库格式为maven2,即我们平时使用的仓库格式,使用maven2格式的还有maven-public、maven-release、maven-snapshots,所以这几个我们重点关注,另外还有3个仓库的格式为nuget的,可以不看他们,反正我是用不到。点击
maven-central
进入这个仓库的设置界面,在这里可以看到它代理的地址,截图如下:
如上图,maven-central
自身的地址为:http://android666.cn:8081/repository/maven-central/,它代理的地址为:https://repo1.maven.org/maven2/,当我们通过http://android666.cn:8081/repository/maven-central/地址来加载依赖时,Nexus是会到https://repo1.maven.org/maven2/中去下载依赖,下载后会缓存一份到Nexus服务器中,下一次再下载依赖时就可以直接使用缓存了,加快下载速度。
- maven-release 它的类型为hosted,用于上传依赖,比如把自己的库上传到这里。
- maven-snapshots,它的类型也是hosted,说明也是用于上传依赖的,具体区别大家自己去百度工件的release与snapshots的区别,大概意思就是稳定的、正式的版本上传到release,还不太稳定的上传到snapshots。
- maven-public,它的类型为group,说明这是一个组,点击进去查看详情,如下:
如上图,可以看到maven-public
仓库实际上是把maven-central
、maven-release
、maven-snapshots
这三个仓库组合到了一起,所以,平时我们使用的时候,使用maven-public
作为依赖的仓库地址即可。在主页上,有一个copy按钮,移上去可以看到仓库的地址,点击copy按钮即可复制该地址: