# 先执行maven的jlink打包 - jlink会根据maven的配置,在target文件夹生成jre环境包,也就是jlink文件夹里的东西 - 在jlink的bin目录里有个可以直接执行的bat文件,执行成功,即打包成功 `mvn javafx:jlink` # 模块化 - jlink所有包都需要进行模块化,最好使用支持模块化的包,不然就需要自己进行模块化打包 - 先生成module-info.java `jdeps --ignore-missing-deps --generate-module-info . netty-all-5.0.0.Alpha2.jar` - 将原本的包反编译出来,然后将module-info.java放进反编译的文件夹里,通过javac生成module-info.class `javac -d . module-info.java` - 再将module-info.class放到模块的文件夹里,再编译进模块里 `jar uf netty-all-5.0.0.Alpha2.jar -C . module-info.class` - 这样模块里就会多一个module-info.class文件,最好将模块备份一下 # 再执行jpackage的打包 - jpackage会根据jlink的环境包再次打包成exe文件 - --type/-t:要创建的包的类型,有效值为 "app-image"、"exe"、"msi"、"rpm"、"deb"、"pkg"、"dmg" - --app-version:应用程序的版本 - --copyright:应用程序的版权信息 - --description:应用程序的描述 - --icon:应用程序包图标的路径,只支持ico文件 - --name/-n:应用程序和/或程序包的名称 - --dest/-d:输出文件的目的地路径 - --temp:用于创建临时文件的目录路径 - --vendor:应用程序的供应商 - --add-modules:要添加的模块列表,可以多次使用,使用jlink环境包不需要这个 - --module-path/-p:模块路径,可以多次使用,使用jlink环境包不需要这个 - --runtime-image:预定义的运行时映像路径,指向jlink环境包 ```非常重要``` - --input/-i:包含要打包文件的输入目录路径,使用jlink环境包不需要这个 - --main-class :要执行的应用程序主类的全名,需要跟maven配置和module-info里的配置一致 ```非常重要``` - --main-jar:包含主类的 JAR 文件的路径,使用jlink环境包不需要这个 - --module/-m:应用程序的主模块和主类,使用jlink环境包不需要这个 - --win-console:为需要控制台交互的应用程序创建控制台启动器 - --win-dir-chooser:安装时添加选择安装路径的选项 - --win-menu:在开始菜单中添加应用程序 - --win-shortcut:在桌面创建快捷方式 `jpackage -t exe -n udp_server -m "udpserver/com.wdkl.udpserver.UdpServerApplication" --runtime-image target/jlink -d .\out --icon .\icon\udp.ico --app-version 1.1 --win-shortcut --win-menu --win-console`