npm 和 maven 使用 Nexus3 私服 | 前后端一起学

前文《Docker 搭建 Nexus3 私服 》介绍了在 docker 环境下安装 nexus3 以及 nexus3 的基本操作和管理,本文分别介绍 npm(前端)和 maven(后端)如何使用 nexus3 作为私服。文中的 demo 可以在 github 上搜索 youyage_nexus3_demos 获取。

本篇内容分为上下两个部分,上篇是npm使用 Nexus3 私服,下篇是maven 使用 Nexus3 私服。

1 npm 中使用 Nexus3

这里以一个 JS 库为例来说明前端公共库如何发布到 Nexus3 私服。Vue或其他组件库的发布也是一样的操作,只是打包等发布前的操作不同。本文中所有的 demo 都放在 youyage_nexus3_demo

1.1 JavaScript 库开发

1) 创建 JS 库项目目录: js-demo-lib

2)使用 npmyarn 等包管理工具初始化项目:

yarn init

3)由于咱们重点是演示 nexus3 发布 JS 库,故 webpack 打包等操作咱们都略过。修改 package.json,指定 type 属性值为 module:

{
  "name": "js-demo-lib",
  "version": "1.0.1",
  "type": "module",
  "main": "index.js",
  "license": "MIT",
  "author": {
    "name": "youyage",
    "email": "heroyyg@126.com"
  }
}

4)在项目根目录下创建入口文件 index.js:

export const testMsg = (str) => {
    return hello ${str}
}

export default {
    testMsg
}

该文件中就只提供了一个 testMsg 方法。

1.2 创建 Nexus3 前端仓库

1)创建仓库,仓库类型选择 npm(hosted),Name 填写 demo-npm-hosted,点击页面底部的 Create repository按钮创建仓库;

2)创建仓库,仓库类型选择 npm(proxy),Name 填写 demo-npm-proxy

Remote storage 即远程仓库的地址,可以填 npm 官方的地址,也可填写淘宝镜像或其他地址,这里我填写官方地址: https://registry.npmjs.org,点击页面底部的 Create repository按钮创建仓库;

3)创建仓库,仓库类型选择 npm(group),Name 填写 demo-npm-group,在下面的 Group 中将左侧两个刚创建的仓库移动到右边:

npm 和 maven 使用 Nexus3 私服 | 前后端一起学

点击页面底部的 Create repository按钮创建仓库。

通过上面的三个步骤,便创建了npm的三种类型的仓库。

npm 和 maven 使用 Nexus3 私服 | 前后端一起学

点击 demo-npm-group 后面的 copy 按钮可以查看并复制私服地址:

npm 和 maven 使用 Nexus3 私服 | 前后端一起学

1.3 JS 库发布到 Nexus3 私服仓库

要发布 JS 库,需要先通过 npm 指定 Registry 登录。Registry 为私服 hosted 仓库的地址:

http://localhost:8081/repository/demo-npm-hosted/

在命令行中使用 npm 登录 nexus3 私服:

npm login --registry http://localhost:8081/repository/demo-npm-hosted/

依次填写上文创建的用户的用户名 username、密码 password、邮箱 email:

npm 和 maven 使用 Nexus3 私服 | 前后端一起学

401 错误处理

如果登录失败,出现 401 错误:

npm 和 maven 使用 Nexus3 私服 | 前后端一起学

在确保用户名、密码、邮箱都正确的前提下,可以采用下面的方式进行处理:

打开系统当前用户主目录中的 .npmrc 文件:

vi /Users/liuyun/.npmrc

删除该文件中对应私服地址的 authToken,如下图,删除该行,然后重新登录。

npm 和 maven 使用 Nexus3 私服 | 前后端一起学

登录成功后会提示:

npm notice Log in on http://localhost:8081/repository/demo-npm-hosted/

发布 JS 库:

npm publish --registry http://localhost:8081/repository/demo-npm-hosted/

如果发布时提示 401,可按照上述登录 401 进行检查;如果还是失败,则检查 nexus3 的 Realms 设置,查看 npm Bearer Token Realm 是否激活。

JS 库发布成功,可以在 Nexus 中看到:

npm 和 maven 使用 Nexus3 私服 | 前后端一起学

1.4 应用通过 Nexus3 使用 JS 库

1) 创建 JS 库项目目录: js-demo-app

2)使用 npmyarn 等包管理工具初始化项目:

yarn init

3)使用 yarn 添加依赖:上面发布的 JS 库 js-demo-lib:

yarn add js-demo-lib --registry http://localhost:8081/repository/demo-npm-group/

4)修改 package.json,指定 type 属性值为 module

5)在项目根目录下创建入口文件 index.js:

import lib from 'js-demo-lib'

console.log(lib.testMsg('程序员优雅哥'))

该文件中引入 JS 库,并调用 JS 库的 testMsg 方法。

6)在控制台中测试运行:

node ./index.js

控制台中输出:

hello 程序员优雅哥

如果 JS 库升级了,可以使用如下命令在应用端升级:

yarn upgrade js-demo-lib --registry http://localhost:8081/repository/demo-npm-group/

1.5 命令总结

npm 登录私服使用 hosted 地址:

npm login --registry http://localhost:8081/repository/demo-npm-hosted/

npm 发布使用 hosted 地址:

npm publish --registry http://localhost:8081/repository/demo-npm-hosted/

npm 添加 / 更新私服上的包,使用 group 地址:

yarn add js-demo-lib --registry http://localhost:8081/repository/demo-npm-group/
yarn upgrade js-demo-lib --registry http://localhost:8081/repository/demo-npm-group/

2 Maven 中使用 Nexus3

2.1 Nexus3 Maven 仓库

安装好 nexus3 后,默认有四个 maven 仓库:

maven-central:类型为 proxy,对中央仓库的代理,默认配置了 https://repo1.maven.org/maven2/,可以将其修改为阿里云镜像: http://maven.aliyun.com/nexus/content/groups/public/
maven-release:类型为 hosted,开发人员部署自己的 release 版本 jar 包的宿主仓库
maven-snapshots:类型为 hosted,开发人员部署自己的 snapshots 版本 jar 包的宿主仓库
maven-public:类型为 group,组仓库,聚合了上面三者。

可以按照这四者进行创建,也可以直接使用。这里就直接使用这四个仓库了。

2.2 配置 Maven

打开 maven 的配置文件 settings.xml,如果只是从 nexus3 拉取包,则只需要配置镜像(mirror)即可;如果要发布包到 nexus3 上,除了配置镜像 mirror,还需要配置 server。

  • 镜像配置(group类型 – maven-public 的地址)

                nexus3-maven-public
                central
                Nexus3 Maven Public
                http://localhost:8081/repository/maven-public/

  • 配置 server

        nexus3-releases
        youyage
        111111

        nexus3-snapshots
        youyage
        111111

server 中的 username 和 password 就是 上文在 nexus3 中创建的用户的 id 和 password。

2.3 Java 包发布到 Nexus3 私服仓库

现在创建一个 Maven 项目,将其发布到 Nexus3 中。

1)新建 Maven 项目,项目名为: java-demo-lib

2)pom.xml 如下:


    4.0.0

    com.yygnb.demo.lib
    java-demo-lib
    1.0-SNAPSHOT

        8
        8

            nexus3-releases
            nexus3-releases
            http://localhost:8081/repository/maven-releases/

            nexus3-snapshots
            nexus3-snapshots
            http://localhost:8081/repository/maven-snapshots/

由于需要将该项目发布到 Nexus3 中,故需要在 distributionManagement 节点中配置 repositoryrepository 中需配置三个子节点:

  • id:与 settings.xml 中配置的 server 中的 id 一致;
  • name:无特殊要求
  • url:type 为 hosted 的 maven 仓库。由于 hosted 类型的仓库分为 release 和 snapshots,故两个地址分别对应 maven-snapshots 和 maven-release 的地址。

3)编写 DemoUtils:

package com.yygnb.demo.lib;

public class DemoUtils {

    public static String test(String str) {
        return "snapshot - Hello " + str;
    }
}

发布 snapshots 包:

由于现在 pom.xml 中 version 为: 1.0-SNAPSHOT,将其发布到 maven-snapshots 中。执行

mvn clean deploy

执行成功如下:

npm 和 maven 使用 Nexus3 私服 | 前后端一起学

在 nexus3 页面上也可以看到在 maven-snapshots 仓库中有这个包:

npm 和 maven 使用 Nexus3 私服 | 前后端一起学

发布 release 包:

为了方便后面看效果,此处将DemeUtils 中 test 方法返回值修改为:

return "release - Hello " + str;

将 pom.xml 中 version 修改为 1.0:

1.0

再次执行 mvn clean deploy。执行成功后,可以在 maven-release 仓库中看到这个包:

npm 和 maven 使用 Nexus3 私服 | 前后端一起学

如此一来,release 和 snapshots 都成功发布到 nexus3 的 hosted 仓库中了。

2.4 应用通过 Nexus3 使用 Java 通用包

最后创建一个项目,分别测试拉取上面发布的 snapshots 和 release 包。

创建 Maven 项目,项目名为 java-demo-app。在 pom.xml 中添加repository,指定 nexus3 的 maven-public 地址:


        nexus3-maven-public
        nexus3-maven-public
        http://localhost:8081/repository/maven-public/

            true

            true

添加上面 java-demo-lib snapshot 依赖:


        com.yygnb.demo.lib
        java-demo-lib
        1.0-SNAPSHOT

刷新 Maven,可以看到从 nexus3 中拉取了该依赖。

写个 main 方法测试:

package com.yygnb.demo.app;

import com.yygnb.demo.lib.DemoUtils;

public class MainDemo {

    public static void main(String[] args) {
        System.out.println(DemoUtils.test("程序员优雅哥"));
    }
}

执行该方法,控制台输出:

snapshot - Hello 程序员优雅哥

先将依赖版本修改为 1.0,即:

<dependencies>
    <dependency>
        <groupid>com.yygnb.demo.lib</groupid>
        <artifactid>java-demo-lib</artifactid>
        <version>1.0</version>
    </dependency>
</dependencies>

刷新 Maven,重新执行 main 方法,控制台输出:

release - Hello &#x7A0B;&#x5E8F;&#x5458;&#x4F18;&#x96C5;&#x54E5;

2.5 配置总结

1) settings.xml

...

                nexus3-maven-public
                central
                Nexus3 Maven Public
                http://localhost:8081/repository/maven-public/

        nexus3-releases
        youyage
        111111

        nexus3-snapshots
        youyage
        111111

...

2)pom.xml

...

        nexus3-maven-public
        nexus3-maven-public
        http://localhost:8081/repository/maven-public/

            true

            true

        nexus3-releases
        nexus3-releases
        http://localhost:8081/repository/maven-releases/

        nexus3-snapshots
        nexus3-snapshots
        http://localhost:8081/repository/maven-snapshots/

...

关于 nexus3 在 npm 或 maven 环境下的更多操作,在后面的实战部分再继续,如 Vue3 组件库开发和发布、基于 SpringBoot / Spring Cloud 通用权限服务等。

npm 和 maven 使用 Nexus3 私服 | 前后端一起学

感谢你阅读本文,如果本文给了你一点点帮助或者启发,还请三连支持一下,点赞、关注、收藏,作者会持续与大家分享更多干货

Original: https://www.cnblogs.com/youyacoder/p/16650210.html
Author: 程序员优雅哥(/同)
Title: npm 和 maven 使用 Nexus3 私服 | 前后端一起学

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578493/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • lambda跨账号调用elasticache redis调查结果

    1.本地lambda与被调用方的redis都要绑定一个VPC,至少设定一个子网和路由表,设定好安全组; 2.本地VPC创建对等连接,被调用方接受连接; 3.将各自的IPv4 CID…

    Linux 2023年5月28日
    071
  • 白话TCP/IP原理

    TCP/IP(Transmission-Control-Protocol/Internet-Protocol),中文译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Inte…

    Linux 2023年6月14日
    074
  • 编译iPhone静态库的Makefile实例(与Shell脚本一起完成)

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/cy568searchx/p/5735419.htmlA…

    Linux 2023年5月28日
    0111
  • MySql集群之读写分离配置

    一、主从复制原理 二、环境准备 192.168.140.131 主库 192.168.140.132 从库 三、主库配置 1、修改配置文件 /etc/my.cnf #mysql服务…

    Linux 2023年6月14日
    089
  • Windows 10 多用户同时远程登录

    win服务器版默认是支持多用户登陆的,甚至可以在主机上用不同用户自己远程登陆自己,如window server 2016。 Win10 正常情况下是不允许用户同时远程的,即一个用户…

    Linux 2023年6月14日
    0135
  • shell脚本调试方法

    set -x bash -x test.sh 作者:习惯沉淀 如果文中有误或对本文有不同的见解,欢迎在评论区留言。 如果觉得文章对你有帮助,请点击文章右下角【推荐】一下。您的鼓励是…

    Linux 2023年5月28日
    092
  • Windows+VSCode编译在Linux-x86_64环境上运行的程序

    一、简介 本文主要介绍在Windows平台上使用VSCode,从而可以一键编译出运行在Linux-x86_64环境中的程序或库。 二、实现方式 ① 交叉编译 ② WSL(Windo…

    Linux 2023年6月7日
    095
  • 【论文笔记】(知识蒸馏)Distilling the Knowledge in a Neural Network

    摘要 模型平均可以提高算法的性能,但是计算量大且麻烦,难以部署给用户。《模型压缩》这篇论文中表明,知识可以从复杂的大型模型或由多个模型构成的集成模型中压缩并转移到一个小型模型中,本…

    Linux 2023年6月7日
    0171
  • 什么是可调CAP策略?为什么需要可调CAP策略?

    在说可调CAP策略之前,我们要先说说CAP理论。 CAP理论是设计分布式系统必用的黄金法则,它提出了设计分布式系统的三个基本要求:一致性(Consistency)、可用性(Avai…

    Linux 2023年6月6日
    0115
  • termius好用的shell终端

    ipad下可用 posted @2022-07-23 12:41 jiftle 阅读(75 ) 评论() 编辑 Original: https://www.cnblogs.com/…

    Linux 2023年5月28日
    0109
  • VMware服务关闭后一定要重启

    重要的事情说三遍:服务暂时关闭记得重启,服务暂时关闭记得重启,服务暂时关闭记得重启!!! VMware服务由于安装补丁的需要我暂时把服务关闭了,于是我遇到了尴尬的一幕,于是乎发现上…

    Linux 2023年6月7日
    0119
  • 【小记】QMake 项目获取 Windows 管理员权限

    QMAKE_LFLAGS += /MANIFESTUAC:"level=’requireAdministrator’uiAccess=’false’" 将以上那…

    Linux 2023年6月13日
    085
  • CPU架构对redis的性能影响

    CPU架构对redis的性能影响 主流CPU架构 一个CPU处理器中通常有多个运行核心,每一个运行核心称为一个物理核,每个物理核都可以运行应用程序。每个物理核都拥有 私有的一级缓存…

    Linux 2023年5月28日
    0107
  • Linux 配置 IPv4或 IPv6地址

    Linux 配置 IPv4或 IPv6地址 配置 配置介绍 查看网络 ifconfig 网卡介绍 eth0 :本地网卡(CentOS7 是ens33) lo :内网网卡,管理内网I…

    Linux 2023年6月6日
    088
  • 学习一下 SpringCloud (二)– 服务注册中心 Eureka、Zookeeper、Consul、Nacos

    (1) 相关博文地址: 学习一下 SpringCloud (一)– 从单体架构到微服务架构、代码拆分(maven 聚合): https://www.cnblogs.com/l-y…

    Linux 2023年6月11日
    0107
  • 在公司当上PD的心路历程

    前不久因为接了个新项目,我被选中当上PD也就是专门负责给客户演示,推进项目、录视频、写文档、做测试,因为我本来就需要测这些东西,熟悉算法、应用、固件,所以大部分人就觉得非我不可。 …

    Linux 2023年6月8日
    097
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球