使用openapi-generator-cli时遇到了代理的问题

        前言:最近在捣鼓一个开源的管理kafka的web版,名字叫kafka-ui。准备部署到本地,方便平时遇到问题时,查看kafka的情况。开源项目github地址:点这里 。拿到这个项目,折腾了几天,今天终于编译成功了,虽然编译成功了,但遇到了代理的问题,始终无法连接mave的中央仓库。折腾了一天,还是无法解决,实在不想折腾了,还是投降了,选择使用私有仓库解决问题,特此记录一下,等待有缘人来答疑解惑。

        由于最新版的kafka-ui使用的是spring3.x和java17,我们本地项目还在使用java8,所以我之前想着移植到java8中,方便集成到生产环境中使用。经过2天的折腾,这个移植的想法也放弃了,因为代码里面使用了太多的新语法,比如var变量,stream流式的新方法,switch的新语法等等,如果进行移植,那改动太多了,我改了两天都没改完,所以果然放弃了。期间还想过使用旧的支持java8的分支,但想着可能有的功能不全,我是个喜新厌旧的人,所以这个想法也抛弃了。

        在捣鼓过程中,我发现这个项目做的确实挺完整的,不是一个简单的小项目,以下是其官网展示的目前支持的功能:

        这个项目使用了多个插件,是我平时没用过的,尤其是前端,本身就不熟悉,一大堆插件和框架糅合在一起,简直要命。好了,铺垫了这么多,该聊正事了。下面介绍第一个插件:

frontend-maven-plugin

以下是其在pom.xml的配置内容:

<plugin><groupId>com.github.eirslett</groupId><artifactId>frontend-maven-plugin</artifactId><version>${frontend-maven-plugin.version}</version><configuration><workingDirectory>../kafka-ui-react-app</workingDirectory><environmentVariables><VITE_TAG>${project.version}</VITE_TAG></environmentVariables></configuration><executions><execution><id>install node and pnpm</id><goals><goal>install-node-and-pnpm</goal></goals><configuration><nodeVersion>${node.version}</nodeVersion><pnpmVersion>${pnpm.version}</pnpmVersion></configuration></execution><execution><id>pnpm install</id><goals><goal>pnpm</goal></goals><configuration><arguments>install</arguments></configuration></execution><execution><id>pnpm gen:sources</id><goals><goal>pnpm</goal></goals><configuration><arguments>gen:sources</arguments></configuration></execution></executions>
</plugin>

 简单总结这个插件的作用,就是将可将前后端打包成一个包,然后直接运行。不用单独启动前端和后端。

在上面的pom.xml中,插件执行第二个动作就是执行:

pnpm gen:sources

 这个命令的作用生成源码。

gen:sources是自定义的命令,所以在web项目中,package.json有该命令对应的执行内容,如下:

  "scripts": {"start": "vite","dev": "vite","gen:sources": "rimraf src/generated-sources && openapi-generator-cli generate","build": "vite build","preview": "vite preview","lint": "eslint --ext .tsx,.ts src/","lint:fix": "eslint --ext .tsx,.ts src/ --fix","lint:CI": "eslint --ext .tsx,.ts src/ --max-warnings=0","test": "jest --watch","test:coverage": "jest --watchAll --coverage","test:CI": "CI=true pnpm test:coverage --ci --testResultsProcessor=\"jest-sonar-reporter\" --watchAll=false","tsc": "tsc --pretty --noEmit","deadcode": "ts-prune -i src/generated-sources"},
"gen:sources": "rimraf src/generated-sources && openapi-generator-cli generate"

gen:sources后面跟的是两个node module,第一个是rimraf,这个模块类似rm -rf命令,删除文件的作用。第二个是openapi-generator-cli,这个模块就是用来生成源码的,它也是今天的重头戏。

openapi-generator-cli是一个node module,执行这个module,它会生成一个openapitools.json的文件,和web项目的package.json同级。openapitools.json的内容如下:

{"$schema": "node_modules/@openapitools/openapi-generator-cli/config.schema.json","spaces": 2,"generator-cli": {"version": "6.6.0","generators": {"fetch": {"generatorName": "typescript-fetch","output": "src/generated-sources","glob": "../kafka-ui-contract/src/main/resources/swagger/kafka-ui-api.yaml","additionalProperties": {"enumPropertyNaming": "UPPERCASE","typescriptThreePlus": true,"supportsES6": true,"nullSafeAdditionalProps": true,"withInterfaces": true},"typeMappings": {"object": "any"}}}}
}

配置文件中的kafka-ui-api.yaml就是定义的接口,通过这个配置文件里面的定义即可生成相应的源码。在生成源码之前,它需要先去maven中央仓库去下载对应版本的openapi-generator-cli.jar。就是这个地方,折腾了我两天。

我们可以看下面的日志,就是上面的openapi-generator-cli模块执行的大致流程:

[INFO] --- frontend-maven-plugin:1.13.4:pnpm (pnpm gen:sources) @ kafka-ui-contract ---
[INFO] Running 'pnpm gen:sources' in C:\workspace\kafka-ui\kafka-ui-react-app
[INFO] 
[INFO] > kafka-ui@0.4.0 gen:sources C:\workspace\kafka-ui\kafka-ui-react-app
[INFO] > rimraf src/generated-sources && openapi-generator-cli generate
[INFO] 
[INFO] Download 6.5.0 ...
[INFO] Download failed, because of: "connect ETIMEDOUT 146.75.40.209:443"

上面的日志写的很清楚,连接146.75.40.209:443超时了,我查了下,146.75.40.209就是repo1.maven.org的地址,如下图:

通过openapi-generator-cli的源码,也可以确认这一点,以下是配置文件apps/generator-cli/src/config.schema.json中的部分内容:

{"$id": "https://openapitools.org/openapi-generator-cli/config.schema.json","$schema": "http://json-schema.org/draft-07/schema#","title": "OpenAPI Generator CLI - Config","type": "object","required": ["generator-cli"],"additionalProperties": false,"properties": {"$schema": {"type": "string"},"spaces": {"type": "number","default": 2},"generator-cli": {"type": "object","required": ["version"],"properties": {"version": {"type": "string"},"storageDir": {"type": "string"},"repository": {"queryUrl": {"type": "string","default": "https://search.maven.org/solrsearch/select?q=g:${group.id}+AND+a:${artifact.id}&core=gav&start=0&rows=200"},"downloadUrl": {"type": "string","default": "https://repo1.maven.org/maven2/${groupId}/${artifactId}/${versionName}/${artifactId}-${versionName}.jar"}},"useDocker": {"type": "boolean","default": false},"dockerImageName": {"type": "string","default": "openapitools/openapi-generator-cli"},"generators": {"type": "object","additionalProperties": {"$ref": "#/definitions/generator"}}}..........}

 再精简以下,只需关注如下内容即可:

        "repository": {"queryUrl": {"type": "string","default": "https://search.maven.org/solrsearch/select?q=g:${group.id}+AND+a:${artifact.id}&core=gav&start=0&rows=200"},"downloadUrl": {"type": "string","default": "https://repo1.maven.org/maven2/${groupId}/${artifactId}/${versionName}/${artifactId}-${versionName}.jar"}}

上面定义了下载的路径,就是maven的默认中央仓库。

        事到如今,问题已经很清晰了,就是这个中央仓库连接不上。可为什么会连接不上呢,这个有点蹊跷,因为我平时下java的依赖包都没问题。所以可以确定网络是通的。但这里需要重点说明一下,我的环境在公司网络里面,访问外网时会通过代理出去。因为有代理,所以在maven的配置文件中也是配置了代理的。我查看frontend-maven-plugin官网关于代理的问题,它也明确说明了,如果maven配置文件设置了代理,npm也会使用该代理。

由于前面那个build日志是不含代理信息的接下来,所以我们再看一遍maven中增加了代理的build的日志流程:

[INFO] > kafka-ui@0.4.0 gen:sources C:\workspace\kafka-ui\kafka-ui-react-app
[INFO] > rimraf src/generated-sources && openapi-generator-cli generate "--https-proxy=http://10.10.10.10:8000" "--proxy=http://10.10.10.10:8000" "--noproxy=localhost,127.0.0.1"
[INFO] 
[INFO] Download 6.5.0 ...
[INFO] Download failed, because of: "connect ETIMEDOUT 146.75.40.209:443"

由此可以看到,日志中也包含了代理的参数--https-proxy和--proxy。但是build的结果还是不行,提示连不上maven的中央仓库。顺着这个线索,我搜索了下frontend-maven-plugin插件的issue列表,发现有用户报类似的问题,只要是在公司网络有代理的情况下,就会有该问题。详细问题点这儿 ,以下是部分截图:

可惜这个问题直到今天也没看到答案,也不知道他们是否解决了。

        好了,感觉走到现在,有点走不下去了,正准备放弃的时候。又去openapi-generator-cli的官网翻了翻,突然瞥到了自定义私有仓库的配置,看来这个问题还有转机的希望。以下是官网的配置说明:

 正好我们自己有私有仓库,按照上述的方式,配置一个试试,文档特别说明了,如果指定了版本,就不用queryUrl了,所以只需要配置downloadUrl即可。好了,我们再build一次看看,是否能通过了:

[INFO] Reactor Summary:
[INFO] 
[INFO] kafka-ui 0.0.1-SNAPSHOT ............................ SUCCESS [  0.004 s]
[INFO] kafka-ui-contract 0.0.1-SNAPSHOT ................... SUCCESS [ 36.901 s]
[INFO] kafka-ui-serde-api 1.0.0 ........................... SUCCESS [  0.926 s]
[INFO] kafka-ui-api 0.0.1-SNAPSHOT ........................ SUCCESS [ 26.429 s]
[INFO] kafka-ui-e2e-checks 0.0.1-SNAPSHOT ................. SUCCESS [  6.281 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:10 min

编译终于通过了,至于如何设置代理的问题,有知道的大神还请不吝赐教,感激不尽!

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/82634.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图片如何转pdf?几个小妙招了解一下

图片如何转pdf&#xff1f;在日常工作和生活中&#xff0c;我们经常需要将图片转换成PDF格式&#xff0c;以便于我们进行存档、传输或打印。那么&#xff0c;如何快速、方便地将图片转换成PDF呢&#xff1f;这里介绍就为大家介绍几款好用的工具。 我们可以使用【迅捷PDF转换器】…

语音信号的A律压缩和u律压缩matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 A律压缩算法 4.2 μ律压缩算法 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 clc; clear; close all; warning off; addpath(genpath(…

git的日常使用

加入忽略列表&#xff1a;在.gitignore中加入忽略的文件&#xff0c;build/ 表示build文件夹下&#xff0c;*.jar 表示以jar结尾的&#xff0c;用换行符隔开将另一个分支合并到当前分支&#xff1a;git merge xxx冲突出现&#xff0c;可以看看这里&#xff1a;详解Git合并冲突—…

[K8S:命令执行:权限异常:解决篇]:通过更新kubeconfig配置相关信息

文章目录 一&#xff1a;场景复现&#xff1a;1.1&#xff1a;关键信息&#xff1a;1.2&#xff1a;全异常日志输出&#xff1a; 二&#xff1a;解决流程&#xff1a;2.1&#xff1a;更新 kubeconfig&#xff1a;2.1.1&#xff1a;执行命令&#xff1a; 2.2&#xff1a;再次执行…

go-zero 是如何实现计数器限流的?

原文链接&#xff1a; 如何实现计数器限流&#xff1f; 上一篇文章 go-zero 是如何做路由管理的&#xff1f; 介绍了路由管理&#xff0c;这篇文章来说说限流&#xff0c;主要介绍计数器限流算法&#xff0c;具体的代码实现&#xff0c;我们还是来分析微服务框架 go-zero 的源…

canvas实现代码雨

学习抖音&#xff1a; 渡一前端必修课 效果图&#xff1a; 全部代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge">&…

模拟实现消息队列

目录 1. 需求分析1.1 介绍一些核心概念核心概念1核心概念2 1.2 消息队列服务器&#xff08;Broker Server&#xff09;要提供的核心 API1.3 交换机类型1.3.1 类型介绍1.3.2 转发规则&#xff1a; 1.4 持久化1.5 关于网络通信1.5.1 客户端与服务器提供的对应方法1.5.2 客户端额外…

并发——什么是线程死锁?如何避免死锁?

文章目录 1. 认识线程死锁2. 如何避免线程死锁? 1. 认识线程死锁 线程死锁描述的是这样一种情况&#xff1a;多个线程同时被阻塞&#xff0c;它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞&#xff0c;因此程序不可能正常终止。 如下图所示&#xff…

个人对智能家居平台选择的思考

本人之前开发过不少MicroPython程序&#xff0c;其中涉及到自动化以及局域网控制思路&#xff0c;也可以作为智能家居的实现方式。而NodeMCUESPHome的方案具有方便添加硬件、容易更新程序和容量占用小的优势&#xff0c;本人也查看过相关教程后感觉部署ESPHome和编译固件的步骤…

生成树协议

文章目录 STP冗余交换网络为什么存在广播风暴&#xff1f;广播的危害&#xff1f;交换环路的危害&#xff1f; 工作机制BPDU什么是最好的bpduBPDU触发机制 STP选举步骤配置协议分析字段分析开销模式端口状态 故障类型根桥故障直连故障间接故障 &#xff08;链路中间可能有HUB&a…

# Linux下最好用的歌词工具:OSD Lyrics安装使用指引

Linux下最好用的歌词工具&#xff1a;OSD Lyrics安装使用指引 文章目录 Linux下最好用的歌词工具&#xff1a;OSD Lyrics安装使用指引1 安装1.1 直接安装1.2 源码安装 2 错误解决3 快捷方式与软件设置&#xff08;很重要&#xff09;4 首选项相关界面5 最后 OSD Lyrics 是一个桌…

人工智能、BIM技术、机器学习在智慧工地的应用

人工智能、BIM技术、机器学习在智慧工地的应用 智慧工地云平台是专为建筑施工领域所打造的一体化信息管理平台。通过大数据、云计算、人工智能、BIM、物联网和移动互联网等高科技技术手段&#xff0c;将施工区域各系统数据汇总&#xff0c;建立可视化数字工地。同时&#xff0…

第一百二十五天学习记录:C++提高:STL-deque容器(下)(黑马教学视频)

deque插入和删除 功能描述&#xff1a; 向deque容器中插入和删除数据 函数原型&#xff1a; 两端插入操作&#xff1a; push_back(elem); //在容器尾部添加一个数据 push_front(elem); //在容器头部插入一个数据 pop_back(); //删除容器最后一个数据 pop_front(); //删除容器…

MySQL安装和卸载

1.MySQL概述 MySQL概述 MySQL是一个[关系型数据库管理系统]&#xff0c;由瑞典MySQL AB 公司开发&#xff0c;2008年被sun公司收购&#xff0c; 2009sun又被oracle收购&#xff0c;所以属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用…

自然语言处理学习笔记(三)————HanLP安装与使用

目录 1.HanLP安装 2.HanLP使用 &#xff08;1&#xff09;预下载 &#xff08;2&#xff09;测试 &#xff08;3&#xff09;命令行 &#xff08;4&#xff09;测试样例 3.pyhanlp可视化 4. HanLP词性表 1.HanLP安装 HanLP的 Python接口由 pyhanlp包提供&#xff0c;其安装…

halcon 学习笔记

图像的参数 图形参数 Iconic, 包括 image, region, XLD 1.1 image 图像由一个或者多个通道组成&#xff0c;是大小相同的矩阵&#xff0c;包含各种像素类型的灰度值 在图像显示界面&#xff0c;按ctrl健&#xff0c;可以查看当前的像素值 灰度图 一个通道像素点存放在一个矩…

HTML5 中新增了哪些表单元素?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ HTML5 中新增了的表单元素⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、刚…

权限校验—接口检验

一、背景介绍 最近项目中要实现根据不同用户去划分不同的角色&#xff0c;而不同角色具备调用不同接口的权限这个功能。用户在调用接口时需要校验用户是否具有权限访问接口&#xff0c;防止外界恶意调用随意篡改 二、思路&方案 为什么要进行接口鉴权&#xff1f; 接口鉴权…

基于VUE3+Layui从头搭建通用后台管理系统(前端篇)七:工作台界面实现

一、本章内容 本章实现工作台界面相关内容,包括echart框架引入,mock框架引入等,实现工作台界面框架搭建,数据加载。 1. 详细课程地址: 待发布 2. 源码下载地址: 待发布 二、界面预览 三、开发视频 基于VUE3+Layui从头搭建通用后台管理系统合集-工作台界面布局实现 五、…

FPGA----UltraScale+系列的PS侧与PL侧通过AXI-HP交互(全网唯一最详)附带AXI4协议校验IP使用方法

1、之前写过一篇关于ZYNQ系列通用的PS侧与PL侧通过AXI-HP通道的文档&#xff0c;下面是链接。 FPGA----ZCU106基于axi-hp通道的pl与ps数据交互&#xff08;全网唯一最详&#xff09;_zcu106调试_发光的沙子的博客-CSDN博客大家好&#xff0c;今天给大家带来的内容是&#xff0…