摘要:在打包过程中走了很多弯路,搜索了很多文章一 一实践,踩了很多坑。最终总结出来的个人认为最稳妥的方法。在此记录下来方便大家,方便自己。
本文提供了三种打包exe的方式:
如果采用的较新的jdk版本与maven完整配置的依赖包,建议第一种方式。
如果采用像jdk1.8这种旧的版本,且除了maven配置,手动添加过部分依赖包的可以使用第二种方式。
第三种方式JavaPackager为最万能强大的。(建议使用)
一、直接利用Artifacts 打包成exe
按照以下步骤添加Artifacts
完成后进行下一步,注意:必须将右边需要的jar包双击添加到左边,否则exe将缺少包无法执行!
随后进一步配置:Application class中添加项目的启动类,将Native bundle设为all,点击OK
这时,我们可以直接打包了,按照下面方式进行Rebuild。
打包成功,exe程序在项目文件的out/artifacts里面。
优点:方便快捷
缺点:会出现部分jar包执行错误的情况
(我遇见过的情况:exe程序启动后,串口工具包rxtxcomm.jar执行过程中途导致jvm意外崩溃,程序闪退。而在idea中运行项目却可以正常执行)
于是我采用了下面的打包方式
二:先将项目打包成jar包,再通过exe4j打包成exe
1.打包成jar
这里我建议采用maven的maven-assembly-plugin插件进行打包,原因是:
常用的打jar包方式有idea的Artifacts,maven的javafx-maven-plugin与maven-assembly-plugin。
Artifacts的方式与前面一中提到的打exe包方式类似,缺点也一样。
而maven的两种方式,前者生成两个文件:程序jar包与复制所需的依赖jar包到lib目录,操作比较繁琐,而且在exe4j中进行打包的话会出现Caused by: java.lang.NoClassDefFoundError这种错误,也就是个别依赖jar包导入错误的情况。 后者打包项目与依赖的所有jar包生成单个jar包,操作简单,且不容易出错。
maven-assembly-plugin操作过程:
在POM.XML中加入以下依赖
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.fendo.analysis.AnalysisStart</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
打开项目下的META-INF文件中的MANIFEST.MF,查看其中的jar包是否完整,可以手动添加配置:例如我的项目中,手动加了RXTXcomm.jar依赖包,并在jre的bin中手动加了它的两个dll文件,这时如果直接打包,将忽略这个jar包导致程序无法执行。这时我们应该在MANIFEST.MF中添加RXTXcomm.jar,也可以在pom.xml里利用标签配置。
随后打开右方maven,点击m符号。
执行mvn assembly:assembly或install -Dmaven.test.skip=true, 执行成功后会在项目文件的target文件夹下多出一个以-jar-with-dependencies结尾的JAR包. 这个JAR包就包含了项目所依赖的所有JAR的CLASS.
2.exe4j将jar打包成exe
exe4j的官方下载地址:ej-technologies - Java APM, Java Profiler, Java Installer Builder
使用方式:
软件主页,点击next
此处选择JAR in EXE mode。上面的Regular mode是 javafx-maven-plugin 打的包选择的。
输入应用名称,选择exe打包好后的输出地址
输入exe名称,Icon File为exe的图标,在高级选项中选择64bit
VM Parameters配置jvm虚拟机的参数(不需要的可省略)
点击右边加号,添加之前打包好的项目jar包,下方红线选择项目的启动类
下一步配置java运行环境JRE,选择最低最高版本,高级选项中手动添加JRE
点击加号,选择项目开发使用的jdk(最好使用与开发过程中同一个jdk,因为有些人会有在jre中的bin手动添加dll文件的情况)
!!!切记 将java运行环境jre拷贝到与jar包相同的文件下(输出exe也必须在相同的文件目录下),jre路径采用相对路径.\jre,而非绝对路径。不然在没有安装java jdk的电脑上将无法运行。
exe打包好后,jar包可以删除,有jre与exe即可。
选择使用的虚拟机模式,JVM client模式和Server模式启动,分别针对桌面应用和服务器应用做了相应的优化,client版本加载速度较快,server版本加载速度较慢但运行起来较快。Java HotSpot虚拟机默认不带参数启动会首先检测主机是否为服务器,如果是,则以Server模式启动,否则以client模式启动,而检测的根据是至少2个CPU和最低2GB内存。
到此处,重点需要配置的已经完成,后面一直点next即可完成打包,有其它配置需求的请根据个人情况而定。
三:JavaPackager 打包exe
超级好用的javafx工程打包工具,支持打包成 LINUX / MACOS / WINDOWS等操作系统应用,支持打包成安装包或者免安装版本,支持打包添加额外的文件资源,通过maven或gradle配置参数信息,相当的方便。
JavaPackager使用前需要提前安装,有很多下载安装的方式,本人是直接下载安装包。
使用详情请参考github:
JavaPackager
配置事例:
<plugin>
<groupId>io.github.fvarrui</groupId>
<artifactId>javapackager</artifactId>
<version>1.6.6</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>package</goal>
</goals>
<configuration>
<!-- 启动类 -->
<mainClass>com.amt.hardwareTest.MainApplication</mainClass>
<!-- 绑定自定义JRE路径-->
<bundleJre>true</bundleJre>
<jrePath>C:\Users\Administrator\Desktop\GD_AmtDriverTool2.2\jre</jrePath>
<generateInstaller>true</generateInstaller>
<administratorRequired>false</administratorRequired>
<!-- 操作系统-->
<platform>windows</platform>
<copyDependencies>true</copyDependencies>
<!-- 名称与版本-->
<displayName>AmtHardwareTest</displayName>
<name>AmtHardwareTest</name>
<version>1.0</version>
<!-- 手动引入额外资源-->
<additionalResources>
<additionalResource>D:\Item\GD_AmtHardwareTest1.0\datas</additionalResource>
<additionalResource>D:\Item\GD_AmtHardwareTest1.0\lib</additionalResource>
</additionalResources>
<!--详细参数配置-->
<winConfig>
<icoFile>D:\Item\GD_AmtHardwareTest1.0\src\main\ico\app.ico</icoFile>
<generateSetup>false</generateSetup>
<generateMsi>false</generateMsi>
<generateMsm>false</generateMsm>
</winConfig>
</configuration>
</execution>
</executions>
</plugin>
执行maven指令打包:
mvn package
四 :exe修改图标
除了上面提到最简单的Icon File引入或者maven配置的方式,还有其它:
修改exe图标:可以使用软件:ResourceHacker
可以参考以下文章:
怎么更改exe文件的图标_如何修改EXE文件的图标_cumai3211的博客-CSDN博客
修改快捷方式图标:如果图省事,直接修改快捷方式图标就好了
点击exe鼠标右键创建快捷方式,点击快捷方式鼠标右键点击属性,找到更改图标修改即可
希望文章对大家有所帮助!