quarkus 搭建与基础开发环境配置总结
quarkus搭建与基础开发环境配置总结
大纲
- 基础概念
- quarkus2.13.7脚手架工程配置
- 配置maven3.8.7
- quarkus快速启动
- quarkus的三种打包方式
- quarkus将程序打包为二进制文件
- window环境下quarkus云原生二进制文件打包环境搭建
- 使用GraalVM-java11替换本地java8
- 运行二进制文件
基础概念
Quarkus是一个集成了Kubernetes的开源云原生框架, 基于ApacheLicense 2.0发布, 用于创建适配GraalVM和OpenJDK HotSpot的
Kubernetes原生应用, 基于Hibernate、 Eclipse MicroProfile、Kubernetes、 Apache Camel和Eclipse Vert.x等流行库和技术构建。
Quarkus的优点包括可以与Docker和Kubernetes轻松集成, 启动速度快, 驻留集大小(RSS) 内存消耗低, 可提高开发者的生产力。
Quarkus是专为下一代应用程序开发与部署而设计和优化的,适合云原生项目
官方网站:https://quarkus.io/
quarkus 目前不支持交叉编译 需要在各个平台上独立编译
开始前的准备
开发环境
- 1 window11
- 2 quarkus2.13.7.Final
- 3 graalvm-ce-java11-windows-amd64-22.3.0
- 4 maven-3.8.7
- 5 eclipse-java-2022-12-R-win32-x86_64
quarkus脚手架工程配置
使用 quarkus 提供的脚手架代码生成工具直接生成需要的项目
https://code.quarkus.io/
选择版本2.13 -> 选择java11 -> 选择maven -> 点击生成项目
注意 Starter Code 选择的NO 不会生成hello代码 是一个最纯粹基础项目
下载后解压得的项目结构如下
在pom.xml中添加JAX-RS依赖
<dependency><groupId>io.quarkus</groupId><artifactId>quarkus-resteasy-reactive</artifactId>
</dependency>
编写一个最简单的restful 接口
@Path("/jaxrs")
public class JAXRSResource {@GET@Produces(MediaType.TEXT_PLAIN)@Path("/hello")public String hello() {return "Hello jimliu";}
}
此时 最简单的quarkus脚手架工程配置完成
maven配置
**quarkus2.13.7 需要 maven3.8.7以上版本支持 **
window
https://archive.apache.org/dist/maven/maven-3/3.8.7/binaries/apache-maven-3.8.7-bin.zip
linux
https://archive.apache.org/dist/maven/maven-3/3.8.7/binaries/apache-maven-3.8.7-bin.tar.gz
提前配置值好maven的环境变量path
Path中加入
%MAVEN_HOME%\bin;运行mvn -version
maven3.8.7的配置主要注意一下几点
- 1 maven setting.xml中 切换一个国内的镜像库地址
- 2 eclipse中配置 使用maven setting.xml
- 3 项目pom.xml文件中也可以指定 镜像库地址
maven镜像库地址使用华为云
<mirror><id>huaweicloud</id><name>huaweicloud maven</name><mirrorOf>*</mirrorOf><url>https://mirrors.huaweicloud.com/repository/maven/</url>
</mirror>
eclipse中配置 使用maven setting.xml
项目pom.xml指定镜像库地址
此时 quarkus依赖的maven环境配置完成
quarkus快速启动
使用quarkus maven 插件提供的quarkus:dev 快速启动quarkus
mvn quarkus:dev
访问接口 http://127.0.0.1:8080/jaxrs/hello 返回成功
quarkus插件支持热更新,现在稍微修改下JAXRSResource.java 代码可以立刻看到修改后的结果
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/hello")
public String hello() {return "Hello jimliu- 寂寞的4角钱";
}
注意 quarkus2.13.7需要java11环境 如果还没搭建java11可先跳到此步骤
quarkus的三种打包方式
quarkus的三种打包方式
- 1 普通打包方式
- 2 uber-jar打包方式
- 3 静态编译后的原生可执行文件方式
普通打包方式
使用maven package 命令打包项目 这是默认的方式打包出来的jar 不包含运行时依赖的包
mvn clean package
uber-jar打包方式
uber-jar 类似于springboot打包的方式,可以把运行时所有依赖的jar 打包在一起成为一个可执行jar包
注意:老版本的qurakus 例如1.4.1.Final 打包成为uber-jar 需要在application.properties 添加
quarkus.package.uber-jar=true
注意:qurakus2.13.7 已经废弃此方法打包uber-jar
使用-Dquarkus.package.type=uber-jar 的方式实现打包成为uber-jar
mvn clean package "-Dquarkus.package.type=uber-jar"
打包后的uber-jar在 target目录下的 xxx-runner.jar
静态编译后的原生可执行文件方式
quarkus的优势是将java项目打包成为原生可执行文件,让java程序适应云原生时代的快速启动,快速进入高效状态的需求
使用命令
mvn clean package -Pnative
将应用打包成为一个 原生可执行文件
window环境下quarkus云原生二进制文件打包环境搭建
quarkus将项目编译成原生可执行文件需要GraalVM的支持 关于GraalVM参考《Java GraalVM 环境搭建 class文件springboot项目 静态编译二进制文件 入门就看这一篇》
quarkus2.13.7.Final
-
1 需要java版本11
-
2 需要GraalVM版本为22.3.0
GraalVM下载地址: https://github.com/graalvm/graalvm-ce-builds/releases/tag/vm-22.3.0
GraalVM 选择对应的版本
native-image 注意需要和GraalVM 版本 平台一致
window环境
- graalvm-ce-java11-windows-amd64-22.3.0.zip
- native-image-installable-svm-java11-windows-amd64-22.3.0.jar
使用GraalVM-java11替换本地java8
由于quarkus2.13.7.Final 需要java版本11 GraalVM内置openJDK 可以直接使用GraalVM代替本地的java8 Hotspot
注意事项
- 1 GraalVM java11 jre生成
- 2 JAVA环境变量配置
替换JAVA_HOME
例如GraalVM 解压在如下文件夹
D:\graalvm\graalvm-ce-java11-windows-amd64-22.3.0\graalvm-ce-java11-22.3.0
先创建JAVA_HOME (或者替换已存在的java8的 JAVA_HOME )
需要保证PATH下只有一个java命令
jre生成
java9开始 安装jdk后不再安装jre需要自行添加
%JAVA_HOME %/jmods 文件夹下是支持的模块,把这些模块全部都安装起
\bin\jlink.exe --module-path jmods --add-modules com.oracle.graal.graal_enterprise,com.oracle.svm.svm_enterprise,com.oracle.svm_enterprise.ml_dataset,com.oracle.truffle.regex,com.oracle.truffle.truffle_nfi,com.oracle.truffle.truffle_nfi_libffi,java.base,java.compiler,java.datatransfer,java.desktop,java.instrument,java.logging,java.management,java.management.rmi,java.naming,java.net.http,java.prefs,java.rmi,java.scripting,java.se,java.security.jgss,java.security.sasl,java.smartcardio,java.sql,java.sql.rowset,java.transaction.xa,java.xml.crypto,java.xml,jdk.accessibility,jdk.attach,jdk.charsets,jdk.compiler,jdk.crypto.cryptoki,jdk.crypto.ec,jdk.crypto.mscapi,jdk.dynalink,jdk.editpad,jdk.hotspot.agent,jdk.httpserver,jdk.internal.ed,jdk.internal.jvmstat,jdk.internal.le,jdk.internal.opt,jdk.internal.vm.ci,jdk.internal.vm.compiler,jdk.internal.vm.compiler.management,jdk.internal.vm.compiler.truffle.jfr,jdk.jartool,jdk.javadoc,jdk.jcmd,jdk.jconsole,jdk.jdeps,jdk.jdi,jdk.jdwp.agent,jdk.jfr,jdk.jlink,jdk.jshell,jdk.jsobject,jdk.jstatd,jdk.localedata,jdk.management.agent,jdk.management.jfr,jdk.management,jdk.naming.dns,jdk.naming.ldap,jdk.naming.rmi,jdk.net,jdk.pack,jdk.rmic,jdk.scripting.nashorn,jdk.scripting.nashorn.shell,jdk.sctp,jdk.security.auth,jdk.security.jgss,jdk.unsupported.desktop,jdk.unsupported,jdk.xml.dom,jdk.zipfs,org.graalvm.js.scriptengine,org.graalvm.locator,org.graalvm.nativeimage.llvm,org.graalvm.sdk,org.graalvm.truffle --output jre
jre生成完成后 在环境变量Path中添加对应的路径
%JAVA_HOME%\bin;
%JAVA_HOME%\jre\bin;
注意 window修改环境变量后需要重启电脑才能生效
重启电脑后 环境变量配置完成
GraalVM-window编译环境配置
window编译环境需要安装对应的native-image 以及 Visual Studio
native-image
native-image 安装可以参考 《Java GraalVM 环境搭建 class文件springboot项目 静态编译二进制文件 入门就看这一篇》
例如 native-image-installable-svm-java11-windows-amd64-22.3.0.jar 放置在 D:\graalvm\install 文件夹下
执行
gu install -L native-image-installable-svm-java11-linux-amd64-22.2.0.jar
出现GraalVM 22.3.0 Java 11 CE (Java Version 11.0.17+8-jvmci-22.3-b08) 表示完成成功
Visual Studio安装与环境配置
Visual Studio安装与环境配置注意事项
- 1 需要安装MSVC工具
- 2 需要指定语言包
- 3 需要配置对应的环境变量
MSVC工具
Windows开发环境下,还需要安装Visual Studio,并安装MSVC工具 否则GraalVM静态编译时会出cl.exe找不到的错误
Error: Default native-compiler executable 'cl.exe' not found via environment variable PATH
下载Visual Studio 并安装对应的工具
Visual Studio下载地址: https://visualstudio.microsoft.com/zh-hans/downloads/
下载社区版 下载后运行 VisualStudioSetup.exe
选择相关的组件
需要指定语言包
语言包勾选英文,去掉中文,否则quarkus -Pnative 打native-image 二进制文件时会编译报错:
Native-image building on Windows currently only supports target architecture: AMD64 (?? unsupported)
配置对应的环境变量
注意 window修改环境变量后需要重启电脑才能生效
配置window环境下编译需要的环境变量。否则quarkus -Pnative 打native-image 二进制文件时会编译报错
Cannot open include file: 'stdio.h': No such file or directory
环境变量配置如下 (注意 C:\Program Files\Microsoft Visual Studio\2022\ 是Visual Studio的安装路径)
1 添加环境变量
MSVC = C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.35.32215WIN11_INCLUDE = C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0
WIN11_LIB = C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22000.0## 变量值必须为INCLUDE和LIB
INCLUDE = %WIN11_INCLUDE%\ucrt;%WIN11_INCLUDE%\um;%WIN11_INCLUDE%\shared;%MSVC%\include
LIB = %WIN11_LIB%\um\x64;%WIN11_LIB%\ucrt\x64;%MSVC%\lib\x642 添加path中指定 MSVC cl.exe路径
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.35.32215\bin\Hostx64\x64;
注意:变量值必须为INCLUDE和LIB
再运行 mvn clean package -Pnative
编译成功 生成可执行文件
相关文章:

quarkus 搭建与基础开发环境配置总结
quarkus搭建与基础开发环境配置总结 大纲 基础概念quarkus2.13.7脚手架工程配置配置maven3.8.7quarkus快速启动quarkus的三种打包方式quarkus将程序打包为二进制文件window环境下quarkus云原生二进制文件打包环境搭建使用GraalVM-java11替换本地java8运行二进制文件 基础概念…...

扩散模型DDPM开源代码的剖析【对应公式与作者给的开源项目,diffusion model】
扩散模型DDPM开源代码的剖析【对应公式与作者给的开源项目,diffusion model】一、简介二、扩散过程:输入是x_0和时刻num_steps,输出是x_t三、逆扩散过程:输入x_t,不断采样最终输出x_0四、具体参考算法流程图五、模型mo…...
C语言 学生记录管理系统
学生记录管理系统 1--添加 2--删除 3--查询:按姓名 4--查询:按班级 5--查询:按学号 0--退出 请选择操作序号(0—5):1 请输入新学生的学号:1 请输入新学生的…...
【独家】华为OD机试 C 语言解题 - 交换字符
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明本期…...

网络安全平台测试赛 easyphp(phar脏数据处理)
昨天的比赛,14.00-17.00.时间有点紧张,比赛期间没拿下来这道 😭非常痛苦,很顺畅的思路 一步步想下来,卡在最后一步末尾脏数据处理了,最后时间到了 没打通,还需多练 这里本地复现一下࿱…...

【python】XML格式文件读写详解
注:最后有面试挑战,看看自己掌握了吗 文章目录XML介绍格式XML与AJAX与HTML区别联系生成XML文件案例用SAX模块处理XML用DOM模块处理XML🌸I could be bounded in a nutshell and count myself a king of infinite space. 特别鸣谢:…...

理解js的精度问题
参考博客:js精度丢失问题-看这篇文章就够了(通俗易懂)、探寻 JavaScript 精度问题以及解决方案、JavaScript 浮点数陷阱及解法 1 为什么 JavaScript 中所有数字包括整数和小数都只有一种类型 即 Number类型,它的实现遵循 IEEE 754 标准。 符号位S&#…...

蓝桥杯 时间显示
题目 输入输出样例 示例 1 输入 46800999输出 13:00:00示例 2 输入 1618708103123输出 01:08:23评测用例规模与约定 对于所有评测用例,给定的时间为不超过 10^{18}1018 的正整数。 运行限制 最大运行时间:1s最大运行内存: 512M 基础知识 时间的转换…...
qt中设置菜单高度
如题所示,我建立一个菜单,代码如下,但是菜单项的高度太小了, { popupMenu new QMenu(this); QAction *action1 new QAction(tr(“&New1”), this); QAction *action2 new QAction(tr(“&New2”), this); QA…...

测开:前端基础-css页面布局-定位
一 、传统网页布局的三种方式 网页布局的本质–用CSS来摆放盒子,把盒子摆放到相应的位置,css提供了三种传统布局方式,分别是标准流,浮动和定位三种。 二、 定位 2.1 啥是定位 我的理解,就是要把这个元素,…...
Servlet中八个监听器介绍
一、监听对象创建的监听器 1、ServletContextListener /*** 用于监听ServletContext对象创建和销毁的监听器* since v 2.3*/public interface ServletContextListener extends EventListener {/*** 对象创建时执行此方法。该方法的参数是ServletContextEvent事件对象…...

LicenseBox Crack,对服务器的要求最低
LicenseBox Crack,对服务器的要求最低 LicenseBox是用于管理基于PHP的软件、WordPress插件或主题、主题、插件和WordPress的更新和许可的完整软件。它易于安装,对服务器的要求最低,用户友好的界面,无限脚本的使用为您的创造力打开了大门。 Li…...

css中重难点整理(vertical-align)
一、vertical-align 在学习vertical-align的时候,可能会很困惑。即使网上有一大推文章讲veitical-align,感觉看完好像懂了,等自己布局的时候用到vertical-align的时候好像对它又很陌生。这就是我在布局的时候遇到的问题。 本来vertical-align就很不好理…...

javaScript基础面试题 ---宏任务微任务
宏任务微任务一、为什么JS是单线程语言?二、JS是单线程,怎样执行异步代码?1、JS是单线程语言 2、JS代码执行流程,同步执行完,再进行事件循环(微任务、宏任务) 3、清空所有的微任务,再…...

基于JSP的网上书城
技术:Java、JSP等摘要:随着科技的迅速发展,计算机技术已应用到社会的各个领域。随着计算机技术和通信技术的迅速发展,网络的规模也逐渐增大,网络的元素也随之不断增加,有的利用其通信,有的利用其…...
C#教程 05 常量
文章目录 C# 常量整数常量浮点常量字符常量字符串常量定义常量C# 常量 常量是固定值,程序执行期间不会改变。常量可以是任何基本数据类型,比如整数常量、浮点常量、字符常量或者字符串常量,还有枚举常量。 常量可以被当作常规的变量,只是它们的值在定义后不能被修改。 整数…...
【华为OD机试真题java、python】基站维修工程师【2022 Q4 100分】(100%通过)
代码请进行一定修改后使用,本代码保证100%通过率。本文章提供java、python两种代码 题目描述 小王是一名基站维护工程师,负责某区域的基站维护。 某地方有 n 个基站( 1<n<10 ),已知各基站之间的距离 s( 0<s<500 ), 并且基站 x 到基站 y 的距离,与基站 y …...

你是真的“C”——为冒泡排序升级赋能!
你是真的“C”——为冒泡排序升级赋能!😎前言🙌冒泡排序升级赋能之境界一!冒泡排序升级赋能之境界二!qsort库函数的运用和认识总结撒花💞😎博客昵称:博客小梦 😊最喜欢的…...

【JavaEE】基于mysql与servlet自制简易的表白墙程序
文章目录1 表白墙页面构建2 Servlet 回顾3 表白墙后端程序实现3.1 我们需要做什么?3.2 实现细节4 实现结果写在最后1 表白墙页面构建 该页面由标题、文本、三个 input 输入框与一个提交按钮构成,整体比较简单,相关样式文件和页面代码会在后面…...

抓包技术(浏览器APP小程序PC应用)
P1 抓包工具 01. Fidder 首先第一个Fiddler它的优势,独立运行,第二个支持移动设备(是否能抓移动APP的包,)在这一块的话wireshark、httpwatch就不支持,因此在这一块就可以排除掉前连个,因为我们…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...