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

news2024/11/24 7:45:14

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

        由于最新版的kafka-ui使用的是springboot3.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] --- 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] Downloaded 6.5.0

日志上可以看到,download成功了, 接下来我们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.coloradmin.cn/o/871929.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

谷歌广告如何选取最佳关键词

本文我们主要介绍小白第一次投放谷歌广告&#xff0c;如何选取关键词和出价设置本文主要分为部分&#xff1a; 1、投放前调研 在设置我们的广告前&#xff0c;需要确定我们的关键词以及这个词在谷歌上的热度&#xff0c;来做好我们广告预算的分配&#xff0c;可以利用一些工具…

云安全攻防(十)之 资源耗尽型攻击

资源耗尽型攻击 同为虚拟化技术&#xff0c;容器与虚拟机既存在相似之处&#xff0c;也有显著不同。在资源限制方面&#xff0c;无论使用 VMware、Virtual Box 还是 QEMU&#xff0c;我们都需要为即将创建的虚拟机设定明确的CPU、内存及硬盘资源阈值。在虚拟机内部进程看来&am…

使用GraphQL在Postman中进行API测试

GraphQL 是一种用于API的开源数据查询和操作语言&#xff0c;用于API的查询语言和运行时。它使客户端能够精确地指定其数据需求&#xff0c;并获得预测性地结果。GraphQL旨在提高API的效率、灵活性和可靠性。 Postman 是一款用于API开发的强大工具&#xff0c;它支持REST和Gra…

【Spring Cloud +Vue+UniApp】智慧建筑工地平台源码

智慧工地源码 、智慧工地云平台源码、 智慧建筑源码支持私有化部署&#xff0c;提供SaaS硬件设备运维全套服务。 前言&#xff1a;互联网建筑工地&#xff0c;是将互联网的理念和技术引入建筑工地&#xff0c;从施工现场源头抓起&#xff0c;最大程度的收集人员、安全、环境、材…

邵阳首个沉浸式民国风情街来了!!!上海滩既视感美哭了!

什么&#xff1f;你说你厌倦了繁华闹市里的车水马龙、厌倦了每天上下班的两点一线&#xff1f;你说你喜欢古街旧巷&#xff0c;踏着青苔遍地&#xff0c;去抚摸青砖脉络&#xff0c;去感受时代变迁&#xff0c;你恐怕还不知道&#xff0c;在天子湖隐藏着这么一处穿越之地&#…

初识mysql数据库之图形化界面

目录 一、好用的数据库图形化界面软件 1. Navicat 2. SQLyog 3. MYSQL Workbench 二、MYSQL Workbench基本使用 1. 安装 2. 远端连接 3. 执行sql语句 一、好用的数据库图形化界面软件 在以前的文章中&#xff0c;一共介绍了两种使用数据库的方式&#xff0c;分别为在l…

软件测试工程师的技能树

软件测试工程师是一个历史很悠久的职位&#xff0c;可以说从有软件开发这个行业以来&#xff0c;就开始有了软件测试工程师的角色。随着时代的发展&#xff0c;软件测试工程师的角色和职责也在悄然发生着变化&#xff0c;从一开始单纯的在瀑布式开发流程中担任测试阶段的执行者…

市面上最好用的4款免费ETL工具推荐

一、ETL介绍 ETL流程是数据仓库建设的核心环节&#xff0c;它涉及从各种数据源中抽取数据&#xff0c;经过清洗、转换和整合&#xff0c;最终加载到数据仓库中以供分析和决策。在数据仓库国产化的背景下&#xff0c;ETL流程扮演着重要的角色&#xff0c;今天我们就来讲讲ETL流…

Windows:解决MySQL登录ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using passwor=YES)问题

我在下载的MySQL是8.0.32版本&#xff0c;刚下的时候没什么问题第二天启动MySQL服务就出现了 ERROR 1045 (28000): Access denied for user rootlocalhost (using password: YES) 或 ERROR 1045 (28000): Access denied for user rootlocalhost (using password: NO) 这样的问题…

详解双向链表

1.创建一个新的节点的函数 LTNode*BuyLTnode(LTDataType x) {LTNode* newnode (LTNode*)malloc(sizeof(LTNode));if (newnode NULL){perror("malloc");return NULL;}newnode->next NULL;newnode->prev NULL;newnode->data x;return newnode; } 2.哨兵位…

Java中创建线程三种方式

继承Thread类创建线程实现Runnable接口创建线程使用Callable和Future创建线程 继承Thread类 /*** 使用集成Thread的方式实现多线程*/ public class Match1 {public static void main(String[] args) {Runner liuxiang new Runner();//创建一个新的线程liuxiang.setName(&quo…

智慧餐饮系统jsp酒店点餐订餐管理java源代码

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 智慧餐饮系统 系统有1权限&#xff1a;管理员 智慧餐…

2023国赛数学建模E题思路分析

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 全国大学生数学建模…

【电脑配置】新电脑买回来怎么配置?

【电脑配置】新电脑买回来怎么配置&#xff1f; 前记1. 系统激活步骤记录1.1 前期流程1.2 问题&#xff1a;PIN设置的时候卡住1.3 非联网状态下的后续激活步骤1.4 设置安全验证&#xff1a;PIN 2. 浏览器和联网3. office软件4. 数据迁移5. 编程环境搭建5.1 JDK1.8安装5.2 pytho…

Opencv4基于C++基础入门笔记:图像 颜色 事件响应 图形 视频 直方图

文章目录&#xff1a; 一&#xff1a;环境配置搭建 二&#xff1a;图像 1.图像读取与显示 main.cpp 运行结果 2.图像色彩空间转换 2.1 换色彩 test.h test.cpp main.cpp 运行结果 2.2 照片换背景 test.h test.cpp main.cpp 运行结果 …

网页制作神器—ElementUI(小白入门超详细)

目录 一、前置准备 ⚓ 二、引入ElementUI &#x1f4c4; 三、使用ElementUI ⚙️ 一、前置准备 ⚓ 1、安装相关环境&#xff0c;使用VsCode或者webstrom初始化Vue 项目 软件环境下载地址&#xff1a;软件 - 坚果云 - |同步|备份|无限空间 vue-cli安装&#xff1a; np…

Linux-C++开发项目:基于主从Reactor模式的高性能并发服务器

目录 1.项目介绍2.1项目部署2.2安装版本较高的编译器 2.项目开发过程2.1网络库模块开发2.1.1简单日志宏的实现2.1.2Buffer模块实现2.1.3Socket模块实现2.1.4Channel模块实现2.1.5Poller模块实现2.1.6TimerWheel模块实现2.1.7EventLoop模块实现2.1.8整合测试12.1.9LoopThread模块…

Python:23种Pandas核心操作方法

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 Pandas 是一个 Python 软件库&#xff0c;它提供了大量能使我们快速便捷地处理数据的函数和方法。 一般而言&#xff0c;Pandas 是使 Python 成为强大而高效的数据分析环境的重要因素之一。 在本文中&#xff0c;作者从基本…

LeetCode530. 二叉搜索树的最小绝对差

530. 二叉搜索树的最小绝对差 文章目录 [530. 二叉搜索树的最小绝对差](https://leetcode.cn/problems/minimum-absolute-difference-in-bst/)一、题目二、题解方法一&#xff1a;中序遍历递归方法二&#xff1a;迭代 一、题目 给你一个二叉搜索树的根节点 root &#xff0c;返…