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/