Windows安装maven服务端Nexus,搭建maven、npm私仓

Windows安装maven服务端Nexus,搭建maven、npm私仓

一、前言介绍

打开网址 https://www.sonatype.com/products/sonatype-nexus-oss

Nexus是一种用于管理和托管软件构建和部署的存储库管理器。它可以用作本地或远程存储库,并提供了许多功能,如依赖管理、版本控制、访问控制和部署自动化。

您可以使用Nexus存储库来管理和托管各种软件构建和部署。您可以创建仓库、上传和下载构建文件、设置访问权限等。

腾讯云提供了类似的产品,可以用于构建和管理私有的软件存储库。您可以了解腾讯云的云原生应用仓库 TCR产品,它提供了高可用、安全、稳定的容器镜像仓库服务,适用于容器化应用的构建和部署。

首先声明公司内部是有自己的nexus仓库,但是对上传jar包做了限制,不能畅快的上传自己测试包依赖。于是就自己在本地搭建了一个nexus私服,即可以使用公司nexus私服仓库中的依赖,也可以上传和使用自己的测试包依赖。

私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了私服之后,当Maven需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。

二、下载说明

  1. 安装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.orghttps://registry.npmmirror.com(推荐)、https://registry.npm.taobao.org等。通过proxy仓库下载的包会缓存起来,再使用会去缓存中下载。

  • Maximum component ageMaximum metadata age:缓存时间,我这里全部设置为288000
  • Blob 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 登录。

  1. 单个依赖上传命令

    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 上,你可以手动下载并安装最新的根证书。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值