JavaFX11打包实践

2018-12-08

JavaFX11打包实践

因为目前JavaFX11资料比较少,在打包的时候踩了不少坑,所以来记录一下。 众所周知jdk11是一个改变比较大的版本,javafx从jdk中分离成为单独的项目。如果要用Java11做fx开发,必须要先下载fx的sdk,或者使用maven,gradle等构建工具进行开发。sdk下载地址和指南都可以在https://openjfx.io找到。

我的Java版本:openJDK11.0.1,使用maven进行构建项目,不带modular-info。

首先确保JavaFX本身可以Run。

添加一个新的main入口,不继承Application,代理原有的main。

package org.qe.main;

public class APPLauncher {
    public static void main(String[] args) {
        App.main(args);
    }
}

为什么要这么做请看官方说明:http://mail.openjdk.java.net/pipermail/openjfx-dev/2018-June/021977.html 主要是因为jfx不再存在于标准jdk中了。

然后添加shade插件,使用这个插件来打包。

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.0</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <shadedArtifactAttached>true</shadedArtifactAttached>
                            <shadedClassifierName>project-classifier</shadedClassifierName>
                            <outputFile>shade\${project.artifactId}.jar</outputFile>
                            <transformers>
                                <transformer implementation=
                                                     "org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>org.qe.main.APPLauncher</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

注意<mainClass>要改成新的代理类。pom中如果其他地方也配置了<mainClass>,也要修改。

然后就只用maven来进行打包:

mvn compile package

如果一切顺利,这样在shade目录下就会出现可执行的jar包。

如果用了中文,别忘了添加UTF8设置免得程序出现乱码:

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

如果出现问题参考官方文档检查:https://openjfx.io/openjfx-docs/