概述
我在准备使用高版本jdk后,遇到的最麻烦的问题就是打包发布了,主要原因还是jdk的模块化带来的,在经历了长时间折腾后,终于成功完成了这个,当然,只是针对window下的。
想要使用高版本jdk打包发布Windows应用,需要准备:
- exe4j,新版本的那种
- maven,idea自带的就行
插件
maven需要这些才能正确编译:
添加properties节点:
<properties>
添加插件节点:
<plugin>
通过这个插件复制依赖包:
<plugin>
通过jlink和idea的maven插件构建JRE:
看到里面java自带的模块了吗,不是通过maven依赖的那些,只把自带的模块和需要的javafx模块通过jlink连接得到一个jre。
jlink --module-path "D:javafx-jmods-13.0.1" --add-modules java.base,java.naming,java.scripting,javafx.fxml,javafx.controls,javafx.base,javafx.graphics,jdk.jfr,java.datatransfer,java.prefs,java.xml,java.sql,java.transaction.xa,java.desktop,jdk.unsupported,java.instrument --output SimpleRT
就像这条命令一样,只需要带上java/javafx的自己的module就好,这样我们就得到了一个jre。
接着就可以对工程进行maven package了,这之后可以得到一个打包好的jar和一个lib文件夹,里面是依赖包。把jar和依赖包放在一起,就是把jar也扔到lib里面。
如果lib里面有javafx的包,需要删掉他们。
使用刚刚的jre,那里面有bin文件夹,找到java,然后执行:
[jre的java.exe路径] -p [lib文件夹的路径] -m [模块名]/[main类的全限定名]
没有意外的话,那么这个时候应用就运行起来了。
打包为EXE
这个没有什么特别的了,lib文件夹配置在module-path里面,从modulepath选择main类,然后生成exe即可,原来exe4j怎么用现在基本还是怎么用,这个软件要用高版本,不然不支持jpms,也就是java模块化系统。