GraalVM详细安装及打包springboot、java、javafx使用教程(打包普通JAVA项目篇)

前言

在当前多元化开发环境下,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.导入依赖文件

    <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>17</java.version><maven.compiler.source>${java.version}</maven.compiler.source><maven.compiler.target>${java.version}</maven.compiler.target><graalvm.version>23.1.0</graalvm.version><!--大于 0.9.9 的版本会出现构建失败,https://github.com/graalvm/native-build-tools/issues/233需要增加 <useArgFile>false</useArgFile>--><native.maven.plugin.version>0.9.27</native.maven.plugin.version><!-- 启动类 --><start-class>com.star.graalvm.AppStart</start-class></properties>
    <dependencies><dependency><groupId>org.graalvm.sdk</groupId><artifactId>graal-sdk</artifactId><version>${graalvm.version}</version><scope>provided</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency></dependencies>

导入编译打包插件

    <build><plugins><!--* 1. 编译器插件* 2. 打包插件* 3. 插件使用链接https://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#forceJavacCompilerUse--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version></plugin><!-- 插件使用链接 https://maven.apache.org/plugins/maven-assembly-plugin/assembly.html --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><configuration><finalName>${project.build.finalName}</finalName><archive><manifest><mainClass>${start-class}</mainClass></manifest></archive><!-- 表示使用assembly预制的描述符jar-with-dependencies创建包含项目依赖的程序集二进制文件。 --><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs><appendAssemblyId>false</appendAssemblyId></configuration><!--配置将创建程序集绑定到了package阶段。则在执行mvn package后,会在target目录下生成类似的文件:XXX-1.0-SNAPSHOT-jar-with-dependencies.jar,在版本和后缀之间的jar-with-dependencies为用于创建程序集的描述符的id,即自定义的assembly描述符文件中配置的id。如果不想在文件或目录后追加此id,可以在配置中将appendAssemblyId设置为false--><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin><!-- 插件使用链接 https://graalvm.github.io/native-build-tools/latest/maven-plugin.html --><plugin><groupId>org.graalvm.buildtools</groupId><artifactId>native-maven-plugin</artifactId><version>${native.maven.plugin.version}</version><configuration><skip>false</skip><!-- 使用参数文件进行原生映像构建 --><useArgFile>false</useArgFile><!-- 指定镜像名称 如果未提供自定义映像名称,则默认使用项目的工件 ID。--><imageName>${project.artifactId}</imageName><!-- 指定主类 --><mainClass>${start-class}</mainClass><!-- 其他参数传递给本机映像生成器 --><buildArgs>--no-fallback-H:-CheckToolchain</buildArgs><!-- GraalVM 可达性元数据支持 --><!-- https://github.com/oracle/graalvm-reachability-metadata --><metadataRepository><enabled>true</enabled></metadataRepository><!--<agent><enabled>true</enabled></agent>--><!--使用快速构建模式构建映像 -->
<!--                     <quickBuild>true</quickBuild>--></configuration><extensions>true</extensions><executions><execution><goals><!-- “native:build”目标已弃用。请改用 'native:compile-no-fork'。 --><goal>compile-no-fork</goal></goals><phase>package</phase></execution></executions></plugin></plugins></build>

3.新建启动类

/*** @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 -DskipTests

2.方式二:maven插件

使用idea的maven插件打包idea—>maven—>当前项目—>plugins—>native---->native:compile

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4.示例代码

  1. gitee
  2. github

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/762521.shtml

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

相关文章

ArcGis 地图文档

ArcGis官网 https://developers.arcgis.com/labs/android/create-a-starter-app/ Arcgis for android 加载谷歌、高德和天地图 https://blog.csdn.net/qq_19688207/article/details/108125778 AeroMap图层地址: API_KEY: 7e95eae2-a18d-34ce-beaa-894d6a08c5a5 街道图&#xf…

Python模块与包管理使用pip与virtualenv【第151篇—模块与包管理】

Python模块与包管理&#xff1a;使用pip与virtualenv 在Python开发中&#xff0c;模块和包管理是至关重要的&#xff0c;它们使得代码的组织、重用和共享变得更加简单和高效。本文将介绍两个Python生态系统中最常用的工具&#xff1a;pip和virtualenv。通过这些工具&#xff0…

探索医用制氧机的种类及其应用场景

医用制氧机是一种能够制取高纯度氧气的制氧设备&#xff0c;广泛应用于各种场景。随着科技的进步和行业需求的增加&#xff0c;医用制氧机的种类和应用领域也在不断扩展。本文将探索医用制氧机的多元种类及其应用领域&#xff0c;以更好地了解这一设备的重要性。 一、医用制氧机…

docker构建镜像命令

编写dockerfile文件 例子1; FROM oraclelinux:7-slim ENV release19 ENV update13 RUN curl -o /etc/yum.repos.d/public-yum-ol7.repo https://yum.oracle.com/public-yum-ol7.repo && \yum-config-manager --enable ol7_oracle_instantclient && \yum in…

Git:分布式版本控制系统

目录 Git的特点和功能常见的功能和对应的命令 Git的特点和功能 Git是一个分布式版本控制系统&#xff0c;用于跟踪和管理项目的代码变更。它是由Linus Torvalds在2005年创建的&#xff0c;旨在管理Linux内核的开发。Git具有以下特点和功能&#xff1a; 分布式版本控制&#xf…

企业数字化问题,一个系统能否解决?

在企业数字化转型的过程中&#xff0c;很多企业都会遇到各种各样的问题。有时候&#xff0c;这些问题并不仅仅是技术上的挑战&#xff0c;而更多地涉及到企业管理和运营的主要问题。贪大求全、策略失误、软件公司的“上游路线”等现象&#xff0c;都可能成为企业数字化建设失败…

java并发编程之 volatile关键字

1、简单介绍一下JMM Java 内存模型&#xff08;Java Memory Model 简称JMM&#xff09;是一种抽象的概念&#xff0c;并不真实存在&#xff0c;指一组规则或规范&#xff0c;通过这组规范定义了程序中各个变量的访问方式。java内存模型(JMM)屏蔽掉各种硬件和操作系统的内存访问…

快速区分清楚图形渲染中的AABB,KD树和BVH这些概念

快速区分清楚图形渲染中的AABB&#xff0c;KD树和BVH这些概念 主要想形象去区分好这些术语&#xff0c;目的是扫盲&#xff0c;先开好坑&#xff0c;内容持续填充。 0.先摆出这些词的全称 AABB&#xff1a; 原名&#xff1a;axis aligned bounding box&#xff1b;中文直译名…

流畅的 Python 第二版(GPT 重译)(二)

第三章&#xff1a;字典和集合 Python 基本上是用大量语法糖包装的字典。 Lalo Martins&#xff0c;早期数字游牧民和 Pythonista 我们在所有的 Python 程序中都使用字典。即使不是直接在我们的代码中&#xff0c;也是间接的&#xff0c;因为dict类型是 Python 实现的基本部分。…

科技助力高质量发展:新质生产力的崛起与企业数字化转型

引言 随着科技的飞速发展&#xff0c;我们正逐渐步入数字化智能时代&#xff0c;这个时代不仅为企业带来了无限的机遇&#xff0c;也让其面对前所未有的挑战。在这个快速变革的时代&#xff0c;企业必须不断调整自己的经营策略&#xff0c;适应数字化转型的浪潮&#xff0c;以…

使用appuploder上架App Store流程

使用appuploder流程笔记 1.如何没有账号去apple官网注册一个&#xff0c;地址&#xff1a;https://developer.apple.com/account 2.下载解压appuploder&#xff0c;双击打开&#xff0c;用刚刚注册的账号登录&#xff0c;下载地址&#xff1a;http://www.applicationloader.n…

PHP连接达梦数据库

PDO是一种在PHP中连接数据库的接口&#xff0c;可以通过PDO接口使用PHP连接达梦数据库。 1、安装PHP环境 检查当前环境是否安装PHP [rootlocalhost ~]# php -v 当前环境并未安装PHP&#xff0c;需要进行安装&#xff0c;选择安装PHP7.3版本。 2、安装 epel-release源和源管…

人工智能时代的引领者:AI提示工程激发大语言模型的无限潜能

文章目录 一、AI提示工程的概念与定义二、AI提示工程的应用领域三、AI提示工程的技术创新与突破四、AI提示工程的未来发展趋势《AI提示工程实战&#xff1a;从零开始利用提示工程学习应用大语言模型》亮点内容简介作者简介目录 一、AI提示工程的概念与定义 在当今日新月异的科…

分类预测 | Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别

分类预测 | Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别 目录 分类预测 | Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别。 2.自…

mysql四种事务隔离级别,2024金三银四

TransactionDefinition.PROPAGATION_MANDATORY&#xff1a;如果当前存在事务&#xff0c;则加入该事务&#xff1b;如果当前没有事务&#xff0c;则抛出异常。 TransactionDefinition.PROPAGATION_NESTED&#xff1a;如果当前存在事务&#xff0c;则创建一个事务作为当前事务的…

数据结构 二叉树 力扣例题AC——代码以及思路记录

LCR 175. 计算二叉树的深 某公司架构以二叉树形式记录&#xff0c;请返回该公司的层级数。 AC int calculateDepth(struct TreeNode* root) {if (root NULL){return 0;}else{return 1 fmax(calculateDepth(root->left), calculateDepth(root->right));} } 代码思路 …

利用matplot绘制折线图(详细版-有示例数据)

对于五组数据&#xff0c;绘制折线图&#xff0c;添加有图例、不同折线的颜色等&#xff0c;如下图所示&#xff1a; python代码&#xff1a; import matplotlib.pyplot as plt import numpy as np# 定义数据 data [[1, 2, 3, 4, 5, 6, 7, 8], # 数据1[2, 2, 4, 4, 5, 5, 6,…

MySQL 运算符

MySQL 运算符主要包括 3 大类&#xff1a;比较运算符、算术运算符、逻辑运算符。 算术运算符 加 、减 - 、乘 * 、除 / 、求余 % 比较运算符 运算符 语法 说明 ab 如果参与计算的两个操作数相等则为 true &#xff0c;否则 false ! 或者 <> a!b 或者 a<>b 如…

【Godot 3.5组件】简单血条组件HealthBar

说明 本文原文写自2022年&#xff0c;内容基于Godot3.5。是本人早期进行Godot组件化和自定义节点探索时的产物&#xff0c;当时的代码和思想可能不太成熟&#xff0c;但贴出来&#xff0c;供需要学习组件化基础思路的同学食用。 概述 血条作为一个非常基础和常见的组件&…