目录

  • 前言
  • 打包方式和过程
  • 1. 基于maven插件打包
  • 2. 基于IDEA打包
  • 项目目录以及问题排查


前言

年前改造的一个JavaFx桌面应用程序,按照以前【可执行jar包+exe4j】的思路去打包,很不方便。后发现maven 和 Inteij IDEA对JavaFx的打包提供了非常好的支持,故记录下来。

  • Inteij IDEA版本:2018.3.1
  • maven版本:3.3.9
  • javafx-maven-plugin版本:8.8.3

打包方式和过程

1. 基于maven插件打包

如果使用maven打包,需要添加如下配置,但是打包windows时需要很多依赖库,具体的打包方式可以参考文章:

<build>
        <plugins>

            <!--javafx application package-->
            <plugin>
                <groupId>com.zenjava</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>8.8.3</version>
                <configuration>
                    <!--启动类-->
                    <mainClass>com.maxbill.MainApplication</mainClass>
                    <!--启动引导-->
                    <!--<preLoader>com.maxbill.core.desktop.AppGuide</preLoader>-->
                    <!--运行文件名-->
                    <appName>RedisPlus</appName>
                    <!--启用自定义打包配置-->
                    <verbose>true</verbose>
                    <!--菜单图标-->
                    <needMenu>true</needMenu>
                    <!--桌面图标-->
                    <needShortcut>true</needShortcut>
                    <!--JVM参数-->
                    <jvmArgs>
                        <jvmArg>-Xms100m</jvmArg>
                        <jvmArg>-Xmx200m</jvmArg>
                        <jvmArg>-Dfile.encoding=UTF-8</jvmArg>
                        <jvmArg>-XX:-UseGCOverheadLimit</jvmArg>
                        <jvmArg>-Dsun.jnu.encoding=UTF-8</jvmArg>
                        <jvmArg>-Dvisualvm.display.name=RedisPlus</jvmArg>
                        <argument>-Dapple.laf.useScreenMenuBar=true</argument>
                    </jvmArgs>
                    <!--JVM启动参数-->
                    <launcherArguments>
                        <launcherArgument>-Xms100m</launcherArgument>
                        <launcherArgument>-Xmx200m</launcherArgument>
                        <launcherArgument>-Dfile.encoding=UTF-8</launcherArgument>
                        <launcherArgument>-XX:-UseGCOverheadLimit</launcherArgument>
                        <launcherArgument>-Dsun.jnu.encoding=UTF-8</launcherArgument>
                        <launcherArgument>-Dvisualvm.display.name=RedisPlus</launcherArgument>
                    </launcherArguments>
                    <!--JAVA启动参数-->
                    <runJavaParameter>
                        -Xms100m
                        <!-- -Xms50m -Xmn1g -Xss228k -XX:+UseParallelGC -XX:ParallelGCThreads=20-->
                    </runJavaParameter>
                    <!--APP启动参数-->
                    <runAppParameter>
                        --spring.profiles.active=pro
                    </runAppParameter>
                    <!--安装配置项-->
                    <bundleArguments>
                        <installdirChooser>true</installdirChooser>
                    </bundleArguments>
                    <!--供应商-->
                    <vendor>HericJazz</vendor>
                    <!--允许所有权限-->
                    <allPermissions>true</allPermissions>
                    <!--版本信息-->
                    <nativeReleaseVersion>v3.3.0_cluster</nativeReleaseVersion>
                    <!--说明信息-->
                    <description>
                        RedisPlus是为Redis可视化管理开发的一款开源免费的桌面客户端软件
                    </description>
                </configuration>
            </plugin>

        </plugins>
    </build>

2. 基于IDEA打包

1. 构建Artifacts

Ctrl + Shift + Alt + S 或点击图标

maven项目运行java文件 maven javafx_java


打开项目配置页面,基于javaFx项目构建Artifacts

maven项目运行java文件 maven javafx_maven项目运行java文件_02


2. 配置Artifacts

名称和输出目录

maven项目运行java文件 maven javafx_java_03


3.将依赖加入到输出目录中

maven项目运行java文件 maven javafx_bundle_04


maven项目运行java文件 maven javafx_java_05


4.选择Main-Class

maven项目运行java文件 maven javafx_java_06


打包时,长宽的像素是必填的,不过如果项目中也设置了,最终的效果会以项目中设置的为准。也可以加一下应用程序的icon:

maven项目运行java文件 maven javafx_bundle_07

4.打包项目

maven项目运行java文件 maven javafx_bundle_08


maven项目运行java文件 maven javafx_maven_09

项目目录以及问题排查

[Output directory]/bundles 目录下为实际打包结果:

maven项目运行java文件 maven javafx_bundle_10


[Output directory]/bundles目录下包含执行目录和依赖包

maven项目运行java文件 maven javafx_maven_11


[Output directory]/bundles/[项目名称] 目录下可以找到 对应操作系统的可执行文件

maven项目运行java文件 maven javafx_bundle_12


[Output directory]/bundles/[项目名称] 目录下还有jar包的目录和javaFx环境相关目录

maven项目运行java文件 maven javafx_maven项目运行java文件_13


[Output directory]/bundles/[项目名称]/app 目录下可以找到项目的可执行jar包

maven项目运行java文件 maven javafx_maven_14


直接启动exe程序可能会出现错误,但是并不好排查,可以利用可执行jar包进行排查

进入 [Output directory]/bundles/[项目名称]/app 目录下

使用命令,查看项目输入日志进错误排查

java  -jar  xxxx.jar

maven项目运行java文件 maven javafx_maven_15