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)使用 npm
或 yarn
等包管理工具初始化项目:
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)使用 npm
或 yarn
等包管理工具初始化项目:
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
节点中配置 repository
。repository
中需配置三个子节点:
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 私服 | 前后端一起学的更多相关文章
- SpringBoot+Vue前后端分离项目,maven package自动打包整合
起因:看过Dubbo管控台的都知道,人家是个前后端分离的项目,可是一条打包命令能让两个项目整合在一起,我早想这样玩玩了. 1. 建立个maven父项目 next 这个作为父工程,next Finish ...
- Maven多模块,Dubbo分布式服务框架,SpringMVC,前后端分离项目,基础搭建,搭建过程出现的问题
现互联网公司后端架构常用到Spring+SpringMVC+MyBatis,通过Maven来构建.通过学习,我已经掌握了基本的搭建过程,写下基础文章为而后的深入学习奠定基础. 首先说一下这篇文章的主要 ...
- 前后端分离开发,基于SpringMVC符合Restful API风格Maven项目实战(附完整Demo)!
摘要: 本人在前辈<从MVC到前后端分离(REST-个人也认为是目前比较流行和比较好的方式)>一文的基础上,实现了一个基于Spring的符合REST风格的完整Demo,具有MVC分层结构并 ...
- SpringMVC+Spring+mybatis+maven+搭建多模块框架前后端分离开发框架的完整demo,拿走不谢。——猿实战02
猿实战是一个原创系列文章,通过实战的方式,采用前后端分离的技术结合SpringMVC Spring Mybatis,手把手教你撸一个完整的电商系统,跟着教程走下来,变身猿人找到工作不是 ...
- 在IDEA中使用Maven将SpringBoot项目打成jar包、同时运行打成的jar包(前后端项目分离)
1.maven教程官网 https://m.runoob.com/maven/ 2.理解Maven的构建生命周期(clean.Package) 3.在项目中使用maven进行打包 4.运行打包好的ja ...
- Docker 搭建 Nexus3 私服 | 基本操作
1 Docker 安装 Nexus3 1.1 创建目录 在硬盘上创建 Nexus3 的主目录: mkdir -p /Users/yygnb/dockerMe/nexus3 为该目录添加权限: chmo ...
- Swagger - 前后端分离后的契约
前后端分离 按照现在的趋势,前后端分离几乎已经是业界对开发和部署方式所达成的一种共识.所谓的前后端分离,并不是传统行业中的按部门划分,一部分人只做前端(HTML/CSS/JavaScript等等),另 ...
- java结合node.js非对称加密,实现密文登录传参——让前后端分离的项目更安全
前言 在参考互联网大厂的登录.订单.提现这类对安全性操作要求较高的场景操作时发现,传输的都是密文.而为了目前项目安全,我自己负责的项目也需要这方面的技术.由于,我当前的项目是使用了前后端分离技术, ...
- 基于shiro+jwt的真正rest url权限管理,前后端分离
代码地址如下:http://www.demodashi.com/demo/13277.html bootshiro & usthe bootshiro是基于springboot+shiro+j ...
随机推荐
- 国内外组态软件对比分析(InTouch、WinCC、iFix、iNeuOS)
在我国自动化控制领域应用较广泛的工业自动化组态软件有Wonderware公司InTouch.西门子公司Wincc.GE公司iFix.国内也有一些传统组态软件厂商,使用的功能和形式基本上十分类似,受当时 ...
- Citus 11 for Postgres 完全开源,可从任何节点查询(Citus 官方博客)
Citus 11.0 来了! Citus 是一个 PostgreSQL 扩展,它为 PostgreSQL 添加了分布式数据库的超能力. 使用 Citus,您可以创建跨 PostgreSQL 节点集群透 ...
- 让我们用Vue cli全家桶搭建项目
一般项目都会用到这几个,这里不在详细介绍概念,只是简单的使用.一.搭建cli 1.事先安装好cnpm(淘宝镜像) npm install -g cnpm --registry=https://regi ...
- 解开XAML的邪恶面纱
什么是XAML,首先我们看下它的外观 <Window x:Class="Blend_WPF.WindowStyle" xmlns="http://sc ...
- Mysql安装配置以及解决重装Mysql时忘记root password问题
目录 1.Mysql安装以及环境变量配置 重装Mysql时忘记root password问题 1.Mysql安装以及环境变量配置 官网安装:https://www.mysql.com/ 按 ...
- 【Java面试】RDB 和 AOF 的实现原理、优缺点
Hi,大家好,我是Mic. 一个工作了5年的粉丝私信我,最近面试碰到很多Redis相关的问题. 其中一个面试官问他Redis里面的持久化机制,没有回答得很好. 希望我帮他系统回答一下. 关于Redis ...
- ASP.NET Core 根据环境变量支持多个 appsettings.json配置文件 (开发和生产)
新建一个项目,web根目录会出现一个 appsettings.json 配置文件, 此时添加--新建项,输入 appsettings.Development.json 再新增一个,appsetti ...
- NC24017 [USACO 2016 Jan S]Angry Cows
NC24017 [USACO 2016 Jan S]Angry Cows 题目 题目描述 Bessie the cow has designed what she thinks will be the ...
- 013(oulipo)
题目:http://ybt.ssoier.cn:8088/problem_show.php?pid=1455 题目描述:在母串里找子串出现的次数 题目思路:与字符串的搜索有关那就立刻找到哈希 从s[1 ...
- Pytorch从0开始实现YOLO V3指南 part2——搭建网络结构层
本节翻译自:https://blog.paperspace.com/how-to-implement-a-yolo-v3-object-detector-from-scratch-in-pytorch ...