Windows安装maven服务端Nexus,搭建maven、npm私仓
一、前言介绍
打开网址 https://www.sonatype.com/products/sonatype-nexus-oss
Nexus是一种用于管理和托管软件构建和部署的存储库管理器。它可以用作本地或远程存储库,并提供了许多功能,如依赖管理、版本控制、访问控制和部署自动化。
您可以使用Nexus存储库来管理和托管各种软件构建和部署。您可以创建仓库、上传和下载构建文件、设置访问权限等。
腾讯云提供了类似的产品,可以用于构建和管理私有的软件存储库。您可以了解腾讯云的云原生应用仓库 TCR产品,它提供了高可用、安全、稳定的容器镜像仓库服务,适用于容器化应用的构建和部署。
首先声明公司内部是有自己的nexus仓库,但是对上传jar包做了限制,不能畅快的上传自己测试包依赖。于是就自己在本地搭建了一个nexus私服,即可以使用公司nexus私服仓库中的依赖,也可以上传和使用自己的测试包依赖。
私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了私服之后,当Maven需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。
二、下载说明
- 安装Java:Nexus存储库是基于Java开发的,因此您需要先安装Java运行时环境(JRE)或Java开发工具包(JDK)。确保您已经安装了适当版本的Java。
1)下载地址
官网:https://www.sonatype.com/thanks/repo-oss 复制链接用迅雷下载;
网盘:
解压
将下载的Nexus压缩文件解压到您选择的(非中文路径)目录中。

2)文件说明
nexus.exe:位于nexus-3.76.0-03\bin目录下,可执行程序;
nexus.vmoptions:位于nexus-3.76.0-03\bin目录下,可调整内存分配等配置;

nexus-default.properties:位于nexus-3.76.0-03\etc目录下,可修改监听端口;
admin.password:位于sonatype-work\nexus3目录下,存放admin加密后的密码;
3)命令说明

nexus.exe /install # 安装服务,将程序安装到系统服务列表
nexus.exe /run # 运行服务,将程序启动起来(前台线程启动,退出界面即退出程序)
nexus.exe /start # 后台运行,将程序以服务的形式启动(关闭cmd后仍在后台运行)
nexus.exe /stop # 停止服务
nexus.exe /status # 查看服务状态
nexus.exe /uninstall # 卸载服务,在系统服务列表卸载当前服务后,可执行install重新安装
三、配置启动
1)修改端口

2)登陆
默认的用户名和密码分别是:admin/amdin123。admin账号的默认登陆密码在安装目录D:\tools\nexus-3.76.0-03-win64\sonatype-work\nexus3下的admin.password中,打开复制后进行登陆。


3)登陆成功后,修改密码

5)配置访问方式
启用匿名访问:默认情况下,用户可以在没有凭据的情况下从存储库中搜索、浏览和下载组件。请考虑对您组织的安全影响,应谨慎选择禁用匿名访问。

也可以后面在该页面下开启

如下图,匿名用户直接就可以浏览各个仓库的内容。

完成

3)用户管理


四、maven私仓搭建
1)仓库管理
默认安装有以下这几个仓库,在控制台也可以修改远程仓库的地址,第三方仓库等。
| 仓库类型 | 作用 |
|---|---|
| hosted(宿主仓库库) | 存放本公司开发的jar包(正式版本、测试版本) |
| proxy(代理仓库) | 代理中央仓库、Apache下测试版本的jar包 |
| group(组仓库) | 使用时连接组仓库,包含Hosted和Proxy仓库 |
| virtual (虚拟仓库) | 基本用不到,重点关注上面三个仓库的使用 |
① 新增阿里巴巴、华为等代理仓
所需包可以先在https://mvnrepository.com/这里查看看是在哪个仓库,再把这个仓库设置成代理仓。

已经设置的代理仓:
https://repo1.maven.org/maven2/
https://maven.aliyun.com/repository/public/
https://mirrors.huaweicloud.com/repository/maven/
https://repo.e-iceblue.cn/repository/maven-public/
https://repo.jenkins-ci.org/releases/
② 组仓库包含所有代理仓库

③ 依赖下载顺序

先从远程仓库下载到私服仓库,再从私服仓库下载到本地仓库。
2)配置nexus私服用户名和密码
修改maven安装目录下的/conf/settings.xml文件:
<!-- 配置本地仓库,mvn install命令的安装目录 -->
<localRepository>D:/pkg/maven3/.m2/repository</localRepository>
<servers>
<!-- 拉取公司仓库依赖的账号 -->
<server>
<id>company-nexus</id>
<username>admin</username> <!-- 应该配置只能拉取权限 -->
<password>xxxxxxxx</password>
</server>
<!-- 提交到公司正式版本仓库的账号 -->
<server>
<id>company-releases</id>
<username>admin</username> <!-- 目前账号直接给的全部权限 -->
<password>xxxxxxxx</password>
</server>
<!-- 提交到公司测试版本仓库的账号 -->
<server>
<id>company-snapshots</id>
<username>admin</username>
<password>xxxxxxxx</password>
</server>
<!-- 可以配置多个server,分配不同的权限 -->
</servers>
<mirrors>
<!-- 注意配置mirror时,mirrorOf一定要排除私服的repository id否则私服的仓库也会用mirror代理,导致找不到依赖 -->
<mirror>
<id>my-maven-public</id>
<mirrorOf>*</mirrorOf> <!-- mirrorof表示这个镜像是哪些repository的镜像,这里声明的是这个镜像是central,jcenter的镜像,那么自然私服不会被镜像代理。如果某个镜像想代理除私服之外的所有repository;那么就要使用排除法,写法为:
<mirrorof>*,!company-release,!company-snapshot,!personal-release,!personal.snapshot</mirrorOf>
上面的"*"表示该镜像代理所有repository,"!"表示排除这个repository,这样除了带"!"的repo以外的所有repo都会被该镜像代理。-->
<name>nexus私服仓库</name>
<url>http://localhost:18081/repository/maven-public/</url>
</mirror>
<!-- 可以配置其他私服仓库
<mirror>...</mirror>
-->
</mirrors>
3)配置repository
有两种方式:
① 修改settings.xml文件,一劳永逸
通过在全局的settings文件配置altSnapshotDeploymentRepository 和altReleaseDeploymentRepository进行发布,只需配置一次,所有项目就都可以发布,无需在多个项目pom指定
<profiles>
<profile> <!-- 公司maven私服配置 -->
<id>company</id>
<properties> <!-- 用于配置发布的仓库 -->
<altReleaseDeploymentRepository>
company-releases::default::http://localhost:18081/repository/maven-releases/
</altReleaseDeploymentRepository>
<altSnapshotDeploymentRepository>
company-snapshots::default::http://localhost:18081/repository/maven-snapshots/
</altSnapshotDeploymentRepository>
</properties>
<repositories> <!-- 用于配置拉取依赖的仓库 -->
<repository>
<id>company-nexus</id> <!-- repository id要和server id一致才能正确传递账号密码 -->
<url>http://localhost:18081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
<!-- 个人maven私服配置
<profile>
<id>person</id>
...
</profile>
-->
</profiles>
<activeProfiles>
<activeProfile>company</activeProfile> <!-- 填写要激活得profile id -->
<!--activeProfile>person</activeProfile--> <!-- 支持激活多个profile -->
</activeProfiles>
② 修改项目pom文件
这种方式每个项目都得配置,修改maven项目中的pom.xml,pom.xml文件添加distributionManagement节点。如下(id要和settings.xml里的id对的上):
<distributionManagement> <!-- 用于配置发布的仓库 -->
<repository>
<!--id要和settings.xml里的server id对的上-->
<id>company-releases</id>
<name>Nexus Release Repository</name>
<url>http://localhost:18081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<!--id要和settings.xml里的server id对的上-->
<id>company-snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://localhost:18081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
注:
- 如果存在parent,只需在parent中的pom.xml中配置,没有则在本项目的pom.xml配置即可
- < repository >节点下的< id >对应maven的配置文件settings.xml文件中的server的id,两者必须保持一致
- 上传到私仓的是正式版本还是快照版本,取决于pom.xml文件version中是SNAPSHOT还是RELEASE。
4)发布到私仓


如果版本号中不带SNAPSHOT后缀,就会发布到release仓库。
5)报错
问题1:忘记启动nexus仓库,就直接打开maven项目,同步依赖时就报错

进到本地仓库查看是发现该包只有.lastUpdated文件

解决:删除.lastUpdated文件,启动nexus,重新点【重新加载所有maven项目】按钮。

问题2:idea有多个子工程a和b,a依赖b,点进a里面调用的b.jar包的函数跳到的不是工程内b的源码,而是跳进了本地maven仓库内b.jar包的class文件里面
解决:本应该跳进b工程内的java源码的。要清楚一下本地maven仓库内b.jar包所在的文件夹。
五、npm私仓搭建
1)创建角色

2)创建用户

3)创建存储空间


4)设置认证
点击Security->Realms,将npm Bearer Token Realm添加到右边,点击save保存

5)创建3种仓库
npm相关可选类型有三个
hosted(私有仓库):用于发布个人开发的npm组件
proxy(代理仓库):可以代理npm和淘宝镜像
group(组合仓库):对外公开的仓库,集合了hosted和proxy,用户代理配置此地址即可。
正常使用情况下三个仓库都需要创建,除非单独使用某一功能。
创建hosted仓库

创建代理仓库
proxy填npm的镜像地址,常用的有http://registry.npmjs.org、https://registry.npmmirror.com(推荐)、https://registry.npm.taobao.org等。通过proxy仓库下载的包会缓存起来,再使用会去缓存中下载。
Maximum component age、Maximum metadata age:缓存时间,我这里全部设置为288000Blob Store:设置仓库的存储位置,选择我们前面设置的blob中的npm


创建组合仓库:

6)本地设置
在本地设置npm镜像地址
C:\WINDOWS\System32>npm get registry
https://registry.npmmirror.com/
C:\WINDOWS\System32>npm config get registry
https://registry.npmmirror.com/
# 设置本地镜像为npm-group
C:\WINDOWS\System32>npm config set registry=http://localhost:18081/repository/npm-group/
# 获取设置结果
C:\WINDOWS\System32>npm config get registry
http://localhost:18081/repository/npm-group/
7)安装包测试
安装一个包试试效果,可以看到地址是走的我们部署的nexus仓库
npm --loglevel info install react

8)发布包到hosted仓库
登录之前确认npm目前镜像地址是否是私有化地址,如果不是,用npm config set registry= 设置镜像地址
npm login 输入Nexus的用户名和密码,邮箱输入自己邮箱即可
npm publish发布仓库
发布成功之后在Nexus查看包,在search=>npm 中。如果发布失败,可尝试将npm镜像改成hosted仓库
npm config set registry=hoseted仓库地址
设置之后重新执行npm login 登录。
-
单个依赖上传命令
npm publish react-19.0.0.tgz --registry=http://192.168.31.82:8081/repository/npm-rengu/ npm publish lodash-<version>.tgz --registry http://localhost:8081/repository/npm-hosted/
批量上传脚本:
# win
@echo off
for %%f in (*.tgz) do (
echo Publishing %%f ...
npm publish %%f --registry=http://192.168.31.82:8081/repository/npm-rengu/
)
echo All packages published!
pause
# Linux
for package in *.tgz; do
npm publish "$package" --registry http://localhost:8081/repository/npm-hosted/
done
9)npm安装依赖报错



npm --loglevel info install unplugin-vue-components@28.8.0 # 经过npm私仓就报错,安装不上
npm --loglevel info install unplugin-vue-components@28.8.0 --registry=https://registry.npm.taobao.org # 报CERT_HAS_EXPIRED
npm --loglevel info install unplugin-vue-components@28.8.0 --registry=http://registry.npm.taobao.org # http就不会报错CERT_HAS_EXPIRED
npm --loglevel info install unplugin-vue-components@28.8.0 --registry=https://registry.npmmirror.com #直接指定代理仓就能安装成功
npm cache clean --force # 清除npm缓存
npm install -g npm@latest # 更新npm
# 解决CERT_HAS_EXPIRED问题,遇到 CERT_HAS_EXPIRED 错误通常是因为 SSL 证书过期或者不被信任
npm config set strict-ssl false # 此命令来忽略证书验证
npm config set registry http://registry.cnpmjs.org
npm config set registry https://registry.npmmirror.com
npm config set registry http://registry.npm.taobao.org # http就没问题
遇到 npm ERR! code CERT_HAS_EXPIRED 错误时,这通常是因为您的本地计算机上的根证书已过期。这个错误可能是由于您的操作系统或Node.js环境中的证书问题导致的。通常可以通过以下方式来更新:
- 在 Linux 上,你可以更新 ca-certificates 包。
- 在 macOS 上,你可以更新 Keychain 中的根证书。
- 在 Windows 上,你可以手动下载并安装最新的根证书。

2802

被折叠的 条评论
为什么被折叠?



