如何推广网站架构,县 住房和城乡建设局网站,殡仪馆做网站的好处,北京赛车网站开发前言
在当前多元化开发环境下#xff0c;Java作为一种广泛应用的编程语言#xff0c;其应用部署效率与灵活性的重要性日益凸显。Spring Boot框架以其简洁的配置和强大的功能深受开发者喜爱#xff0c;而JavaFX则为开发者提供了构建丰富桌面客户端应用的能力。然而#xff…前言
在当前多元化开发环境下Java作为一种广泛应用的编程语言其应用部署效率与灵活性的重要性日益凸显。Spring Boot框架以其简洁的配置和强大的功能深受开发者喜爱而JavaFX则为开发者提供了构建丰富桌面客户端应用的能力。然而将Spring Boot后端服务与JavaFX前端界面整合并实现高效部署对许多开发者来说是一项挑战。
GraalVM的出现恰好解决了这一难题。作为Oracle公司推出的一款高性能运行时环境它支持多种语言运行并能将Java应用编译为原生可执行文件从而大大提升了应用的启动速度和资源利用率。通过利用GraalVM的原生镜像生成工具Substrate VM我们可以将Spring Boot应用与JavaFX项目无缝集成并将其打包为独立的、跨平台的可执行程序。
本教程将深入浅出地为您介绍如何详细安装GraalVM以及如何在此基础上将普通的Java项目进行打包以实现高效便捷的应用部署。我们将逐步解析操作步骤助您掌握这一技术提升项目的部署效率和用户体验。
1. 环境搭建
上一篇:GraalVM详细安装及打包springboot、java、javafx使用教程(环境安装篇) 下一篇:GraalVM详细安装及打包springboot、java、javafx使用教程(打包javafx项目篇)
2.项目搭建
1.新建java项目
idea–file—new—project填写好相关信息,选择JDK17
2.导入依赖文件 propertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingjava.version17/java.versionmaven.compiler.source${java.version}/maven.compiler.sourcemaven.compiler.target${java.version}/maven.compiler.targetgraalvm.version23.1.0/graalvm.version!--大于 0.9.9 的版本会出现构建失败https://github.com/graalvm/native-build-tools/issues/233需要增加 useArgFilefalse/useArgFile--native.maven.plugin.version0.9.27/native.maven.plugin.version!-- 启动类 --start-classcom.star.graalvm.AppStart/start-class/propertiesdependenciesdependencygroupIdorg.graalvm.sdk/groupIdartifactIdgraal-sdk/artifactIdversion${graalvm.version}/versionscopeprovided/scope/dependencydependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion3.8.1/versionscopetest/scope/dependency/dependencies导入编译打包插件 buildplugins!--* 1. 编译器插件* 2. 打包插件* 3. 插件使用链接https://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#forceJavacCompilerUse--plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion3.8.1/version/plugin!-- 插件使用链接 https://maven.apache.org/plugins/maven-assembly-plugin/assembly.html --plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-assembly-plugin/artifactIdconfigurationfinalName${project.build.finalName}/finalNamearchivemanifestmainClass${start-class}/mainClass/manifest/archive!-- 表示使用assembly预制的描述符jar-with-dependencies创建包含项目依赖的程序集二进制文件。 --descriptorRefsdescriptorRefjar-with-dependencies/descriptorRef/descriptorRefsappendAssemblyIdfalse/appendAssemblyId/configuration!--配置将创建程序集绑定到了package阶段。则在执行mvn package后会在target目录下生成类似的文件XXX-1.0-SNAPSHOT-jar-with-dependencies.jar在版本和后缀之间的jar-with-dependencies为用于创建程序集的描述符的id即自定义的assembly描述符文件中配置的id。如果不想在文件或目录后追加此id可以在配置中将appendAssemblyId设置为false--executionsexecutionidmake-assembly/idphasepackage/phasegoalsgoalsingle/goal/goals/execution/executions/plugin!-- 插件使用链接 https://graalvm.github.io/native-build-tools/latest/maven-plugin.html --plugingroupIdorg.graalvm.buildtools/groupIdartifactIdnative-maven-plugin/artifactIdversion${native.maven.plugin.version}/versionconfigurationskipfalse/skip!-- 使用参数文件进行原生映像构建 --useArgFilefalse/useArgFile!-- 指定镜像名称 如果未提供自定义映像名称则默认使用项目的工件 ID。--imageName${project.artifactId}/imageName!-- 指定主类 --mainClass${start-class}/mainClass!-- 其他参数传递给本机映像生成器 --buildArgs--no-fallback-H:-CheckToolchain/buildArgs!-- GraalVM 可达性元数据支持 --!-- https://github.com/oracle/graalvm-reachability-metadata --metadataRepositoryenabledtrue/enabled/metadataRepository!--agentenabledtrue/enabled/agent--!--使用快速构建模式构建映像 --
!-- quickBuildtrue/quickBuild--/configurationextensionstrue/extensionsexecutionsexecutiongoals!-- “nativebuild”目标已弃用。请改用 nativecompile-no-fork。 --goalcompile-no-fork/goal/goalsphasepackage/phase/execution/executions/plugin/plugins/build3.新建启动类
/*** create 2023-09* author lstar*/
public class AppStart {public static void main(String[] args) {System.out.println(Hello GraalVM ! \n \n请输入q退出程序!);Scanner scanner new Scanner(System.in);while (scanner.hasNextLine()) {String line scanner.nextLine();System.out.println(line);if (q.equals(line)) {System.out.println(Bye);System.exit(0);}}}
}3.构建方式exe
执行完成后jar和exe文件生成在target目录下
1.方式一:命令行
使用idea的terminal命令行进入项目目录,使用mvn命令构建
mvn -Pnative native:compile -DskipTests2.方式二:maven插件
使用idea的maven插件打包idea—maven—当前项目—plugins—native----native:compile 4.示例代码
giteegithub