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就不支持,因此在这一块就可以排除掉前连个,因为我们…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...
性能优化中,多面体模型基本原理
1)多面体编译技术是一种基于多面体模型的程序分析和优化技术,它将程序 中的语句实例、访问关系、依赖关系和调度等信息映射到多维空间中的几何对 象,通过对这些几何对象进行几何操作和线性代数计算来进行程序的分析和优 化。 其中࿰…...
ABAP设计模式之---“Tell, Don’t Ask原则”
“Tell, Don’t Ask”是一种重要的面向对象编程设计原则,它强调的是对象之间如何有效地交流和协作。 1. 什么是 Tell, Don’t Ask 原则? 这个原则的核心思想是: “告诉一个对象该做什么,而不是询问一个对象的状态再对它作出决策。…...
Python打卡训练营学习记录Day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
【仿生机器人】刀剑神域——爱丽丝苏醒计划,需求文档
仿生机器人"爱丽丝"系统架构设计需求文档 一、硬件基础 已完成头部和颈部硬件搭建 25个舵机驱动表情系统 颈部旋转功能 眼部摄像头(视觉输入) 麦克风阵列(听觉输入) 颈部发声装置(语音输出)…...
Razor编程中@Helper的用法大全
文章目录 第一章:Helper基础概念1.1 Helper的定义与作用1.2 Helper的基本语法结构1.3 Helper与HtmlHelper的区别 第二章:基础Helper用法2.1 无参数Helper2.2 带简单参数的Helper2.3 带默认值的参数2.4 使用模型作为参数 第三章:高级Helper用法…...
MQTT协议:物联网时代的通信基石
MQTT协议:物联网时代的通信基石 在当今快速发展的物联网(IoT)时代,设备之间的通信变得尤为重要。MQTT(Message Queuing Telemetry Transport)协议作为一种轻量级的消息传输协议,正逐渐成为物联…...
