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

本文介绍了如何利用GraalVM将SpringBoot后端与JavaFX前端集成,通过GraalVM的性能优势和原生镜像生成工具,实现Java应用的快速部署。教程涵盖了环境设置、项目搭建、GraalVM的安装和使用,以及打包成独立可执行程序的方法。
摘要由CSDN通过智能技术生成

前言

在当前多元化开发环境下,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
  • 28
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将JavaFX应用程序打包成可执行文件(.exe),可以使用以下步骤: 1. 确保你已经安装Java 17开发工具包(JDK)和JavaFX SDK。 2. 创建一个JavaFX项目,并确保它可以正常运行。 3. 打开终端或命令提示符,导航到项目的根目录。 4. 使用以下命令创建一个可执行的JAR文件: ``` jlink --module-path "path/to/javafx-sdk-17/lib" --add-modules javafx.controls,javafx.fxml --output target/jlink ``` 这将创建一个包含JavaFX模块的自定义运行时镜像。 5. 使用以下命令创建一个可执行文件: - 在Windows上: ``` jpackage --input target/jlink --name MyApp --main-jar your-main-jar-file.jar --win-shortcut --win-menu --output dist --icon path/to/your-icon.ico ``` - 在Mac上: ``` jpackage --input target/jlink --name MyApp --main-jar your-main-jar-file.jar --mac-package-name "My App" --mac-package-identifier com.example.myapp --output dist --icon path/to/your-icon.icns ``` 这将创建一个包含应用程序的文件夹,其中包含一个可执行文件和其他必要的文件。 6. 在生成的"dist"文件夹中,你将找到一个名为"MyApp"的文件夹(或其他你在上一步中指定的应用程序名称)。这个文件夹就是你的应用程序,其中包含了生成的可执行文件和其他必要的文件。 请注意,上述命令中的路径和文件名应该根据你的项目和环境进行相应的修改。另外,这些命令可能在不同的操作系统上略有不同,请根据你的操作系统进行相应的调整。 希望这些步骤能帮助你成功将JavaFX应用程序打包成可执行文件!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值