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.32215
WIN11_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\x64
2 添加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
编译成功 生成可执行文件