前文《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 中将左侧两个刚创建的仓库移动到右边:

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

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

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

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:

401 错误处理

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

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

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

vi /Users/liuyun/.npmrc

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

登录成功后会提示:

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 中看到:

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 的地址)
<mirrors>
<mirror>
<id>nexus3-maven-public</id>
<mirrorOf>central</mirrorOf>
<name>Nexus3 Maven Public</name>
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
</mirrors>
  • 配置 server
<servers>
<server>
<id>nexus3-releases</id>
<username>youyage</username>
<password>111111</password>
</server>
<server>
<id>nexus3-snapshots</id>
<username>youyage</username>
<password>111111</password>
</server>
</servers>

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

2.3 Java 包发布到 Nexus3 私服仓库

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

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

2)pom.xml 如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.yygnb.demo.lib</groupId>
<artifactId>java-demo-lib</artifactId>
<version>1.0-SNAPSHOT</version> <properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties> <distributionManagement>
<repository>
<id>nexus3-releases</id>
<name>nexus3-releases</name>
<url>http://localhost:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus3-snapshots</id>
<name>nexus3-snapshots</name>
<url>http://localhost:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
</project>

由于需要将该项目发布到 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

执行成功如下:

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

发布 release 包:

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

return "release - Hello " + str;

将 pom.xml 中 version 修改为 1.0:

<version>1.0</version>

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

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

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

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

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

<repositories>
<repository>
<id>nexus3-maven-public</id>
<name>nexus3-maven-public</name>
<url>http://localhost:8081/repository/maven-public/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>

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

<dependencies>
<dependency>
<groupId>com.yygnb.demo.lib</groupId>
<artifactId>java-demo-lib</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>

刷新 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 程序员优雅哥

2.5 配置总结

1) settings.xml

...
<mirrors>
<mirror>
<id>nexus3-maven-public</id>
<mirrorOf>central</mirrorOf>
<name>Nexus3 Maven Public</name>
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
</mirrors>
<servers>
<server>
<id>nexus3-releases</id>
<username>youyage</username>
<password>111111</password>
</server>
<server>
<id>nexus3-snapshots</id>
<username>youyage</username>
<password>111111</password>
</server>
</servers>
...

2)pom.xml

...
<repositories>
<repository>
<id>nexus3-maven-public</id>
<name>nexus3-maven-public</name>
<url>http://localhost:8081/repository/maven-public/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories> <distributionManagement>
<repository>
<id>nexus3-releases</id>
<name>nexus3-releases</name>
<url>http://localhost:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>nexus3-snapshots</id>
<name>nexus3-snapshots</name>
<url>http://localhost:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
...

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

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

npm 和 maven 使用 Nexus3 私服 | 前后端一起学的更多相关文章

  1. SpringBoot+Vue前后端分离项目,maven package自动打包整合

    起因:看过Dubbo管控台的都知道,人家是个前后端分离的项目,可是一条打包命令能让两个项目整合在一起,我早想这样玩玩了. 1. 建立个maven父项目 next 这个作为父工程,next Finish ...

  2. Maven多模块,Dubbo分布式服务框架,SpringMVC,前后端分离项目,基础搭建,搭建过程出现的问题

    现互联网公司后端架构常用到Spring+SpringMVC+MyBatis,通过Maven来构建.通过学习,我已经掌握了基本的搭建过程,写下基础文章为而后的深入学习奠定基础. 首先说一下这篇文章的主要 ...

  3. 前后端分离开发,基于SpringMVC符合Restful API风格Maven项目实战(附完整Demo)!

    摘要: 本人在前辈<从MVC到前后端分离(REST-个人也认为是目前比较流行和比较好的方式)>一文的基础上,实现了一个基于Spring的符合REST风格的完整Demo,具有MVC分层结构并 ...

  4. SpringMVC+Spring+mybatis+maven+搭建多模块框架前后端分离开发框架的完整demo,拿走不谢。——猿实战02

            猿实战是一个原创系列文章,通过实战的方式,采用前后端分离的技术结合SpringMVC Spring Mybatis,手把手教你撸一个完整的电商系统,跟着教程走下来,变身猿人找到工作不是 ...

  5. 在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)

    1.maven教程官网 https://m.runoob.com/maven/ 2.理解Maven的构建生命周期(clean.Package) 3.在项目中使用maven进行打包 4.运行打包好的ja ...

  6. Docker 搭建 Nexus3 私服 | 基本操作

    1 Docker 安装 Nexus3 1.1 创建目录 在硬盘上创建 Nexus3 的主目录: mkdir -p /Users/yygnb/dockerMe/nexus3 为该目录添加权限: chmo ...

  7. Swagger - 前后端分离后的契约

    前后端分离 按照现在的趋势,前后端分离几乎已经是业界对开发和部署方式所达成的一种共识.所谓的前后端分离,并不是传统行业中的按部门划分,一部分人只做前端(HTML/CSS/JavaScript等等),另 ...

  8. java结合node.js非对称加密,实现密文登录传参——让前后端分离的项目更安全

    前言   在参考互联网大厂的登录.订单.提现这类对安全性操作要求较高的场景操作时发现,传输的都是密文.而为了目前项目安全,我自己负责的项目也需要这方面的技术.由于,我当前的项目是使用了前后端分离技术, ...

  9. 基于shiro+jwt的真正rest url权限管理,前后端分离

    代码地址如下:http://www.demodashi.com/demo/13277.html bootshiro & usthe bootshiro是基于springboot+shiro+j ...

随机推荐

  1. SAP Container Controls(容器)

    BC_CONTROLS_TUTORIAL 效果 代码 REPORT bc_controls_tutorial. *------------------------------------------- ...

  2. centos8 编译安装 httpd-2.4

    前提:关闭selinux和防火墙 SElinux: setenforce 0 vim /etc/selinux/config-->disable 防火墙: firewall-cmd --set- ...

  3. C4C中更方便的消息管理

  4. NC14683 储物点的距离

    NC14683 储物点的距离 题目 题目描述 一个数轴,每一个储物点会有一些东西,同时它们之间存在距离. 每次给个区间 \([l,r]\) ,查询把这个区间内所有储物点的东西运到另外一个储物点的代价是 ...

  5. charles(CA证书)的app端安装

    在使用charles进行的app抓包的时候势必需要对他进行配置: 1. pc端: 第一步: http请求接收charles > proxy > proxy setting > por ...

  6. 【python基础】第19回 多层,有参装饰器 递归 二分法

    本章内容概要 1. 多层装饰器 2. 有参装饰器 3. 递归函数 4. 算法(二分法) 本章内容详解 1. 多层装饰器 1.1 什么是多层装饰器 多层装饰器是从下往上依次执行,需要注意的是,被装饰的函 ...

  7. Tapdata “设擂招贤”携手 LeetCode 举办全球极客技术竞赛

      2021年11月28日 Tapdata 专场全球极客技术竞赛将在 LeetCode 平台开赛,面向程序员"设擂招贤",打擂成功的前50名挑战者将优先获得 Tapdata 高端技 ...

  8. JDBC:Statement问题

    1.Statement问题  2.解决办法:通过PreparedStatement代替  实践: package com.dgd.test; import java.io.FileInputStrea ...

  9. Office共享协作方法——Office共享的正确打开方式、office365白嫖

    OFFICE共享协作方法: 1.OFFICE365激活<推荐.一劳永逸.体验最新版office,协作体验更佳> 一部分用户自带的Office可以用KMS直接激活,那就ok了,注意激活前关闭 ...

  10. C# 委托/事件本质详解

    委托 一.什么是委托 IL层面1>委托的本质就是一个类2>继承自System.MulticastDelegate3>委托里面内置了3个方法:Invoke(),BeginInvoke( ...