一.idea打包exe
idea只是把代码和资源(如照片,css,dll等)打成jar文件的,顺便说一句,idea可以设置编译时候用的jdk版本,然后jar里就是对应版本jdk编译出来的class,来打包的,而最后不管是通过第三方软件还是idea打包的exe应该都是一个压缩文件(launch4j/jsmoonth打包的exe都可以用7zip打开,exe4j的打不开,会报错),虽然idea也可以在jar的同级文件夹bundle里打出exe,但是这个exe无法运行,不知道这个和我用的idea是社区版有没有关系,或许正版的idea可以打出能运行的exe
二.idea+JSMoonth(或idea+launch4j或idea+exe4j)
1.idea打包jar文件
具体细节不写了,网上一搜一大堆(native bundle选择image会生成bundle文件夹,里面会有exe,不想生成natvie bundle就默认选择none就行了),
2.JSMoonth(或launch4j或exe4j)打包exe
(1)exe4j配置的介绍(版本号6.0.1)
(2)jsmoonth配置的介绍(版本0.9.9-7)
(3)launch4j配置的介绍(版本号是3.12)
1.打包:要注意的是jsmoonth依赖的所有通过maven,或者gradle导入的jar文件,都要和生成exe,jre,放在一个文件夹里,不然就会双击exe,没有反应,不报错也不反应那种(我被这个问题坑了三天,后来无意之中想明白了,jar,exe,图片,图标都要放一个文件夹)
2.收费:exe4j是收费软件,试用版的exe4j在弹出应用之前,会弹出一个exe4j的广告弹窗。
3.icon:exe4j,launch4j用的图片必须是icon格式,jsmoonth必须不是icon格式,否则报错,还有就是exe4j打成的exe运行时,状态栏是图标,其他的显示默认的空样式。
4,设置本地包含lib,dll文件夹,要注意,就是lib,dll文件即使已经打包到exe里去了,但是还是要在exe所在的文件夹里再次包含(dll,lib文件一定要和exe在同级文件夹下,否则本机可运行,其他电脑上不可以运行)才可以,不然运行时会报错,UnsatisfiedLinkError;
exe4j是在native library里设置,
jsmoonth在current directory里设置,
哈哈,launch4j没找到在哪里设置这个文件夹,很遗憾,
如下图片所示:
结论
exe4j打的exe文件大小为27.7m,JSMoonth打出来的exe为6.79m,但是exe依赖的jar不需要和exe在同级文件夹下,而luanch4j,jsmoonth打出来的exe所依赖的jar需要和exe在同级文件夹下,7zip可以打开后者的exe,可以看出来,里面没有jar,所以我猜想是exe4j打包的时候,把它依赖的jar压缩到exe里去了,而其余的两个打包工具就没有这么做,所以打完exe,移动它的位置,不移动它的依赖jar程序就会等待加载jar而处于无反应状态。
公司里一个测试的小兄弟快下班的时候,主动要求帮我测了一下编译jdk与对应jre的四种搭配的运行结果,测试的电脑有三台,分别是win 7 32位,win 7 64位,win 10 64位.
- 32位jdk编译的class配置+32jre,win10 64可以 win7 64可以 win7 32可以
- 64位dk编译的class+64位jre,win 7 32位上报错(jsmoonth报错是jvm.dll没有在指定的电脑上运行,launch4j报错是没有jdk
1.8.0到1.9.0),在其余电脑(win 7 64,win 10 64)64位上都可以运行 - 32位dk编译的class+64位jre,win10 64可以 win7 64可以 win7 32报错 ,报错也是
jvm.dll没有在指定的电脑上运行,64位+32位jre, - 64位dk编译的class+32位jre,结果是win10 64可以 win7 64可以 win7 32可以
三 Inno Setup 打exe运行包成安装包(5.5.9版本,)
下面是script文件,把上面生成的exe安装到windows中去,并附加卸载功能
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
[Setup]
AppName=windows应用
AppVerName=ccoclient 1.0
AppPublisher= csdn, Inc.
AppPublisherURL=http://www.csdn.com.cn
AppSupportURL=http://www.csdn.com.cn
AppUpdatesURL=http://www.csdn.com.cn
DefaultDirName={pf}\windows应用
DefaultGroupName=windows应用
UserInfoPage=true
; agreement.txt文件不能为空
LicenseFile=D:\release\agreement.txt
;安装图标
SetupIconFile=D:\release\icon.ico
;备注版本信息
VersionInfoCompany=http://www.csdn.com.cn
VersionInfoDescription=windows应用
VersionInfoVersion=1.0.0.0
VersionInfoCopyright=Copyright (C) 2020-2029 csdn
[Languages]
Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"
Name: "English"; MessagesFile: "compiler:Languages\English.isl"
[Tasks]
Name: "desktopicon"; Description: "Create a &desktop icon"; GroupDescription: "Additional icons:"
[Files]
Source: "D:\release\*.*"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\release\jre32\*"; DestDir: "{app}\jre32"; Flags: ignoreversion recursesubdirs
[Icons]
Name: "{group}\windows应用"; Filename: "{app}\ccoclient.exe"
Name: "{userdesktop}\windows应用"; Filename: "{app}\ccoclient.exe"; Tasks: desktopicon
[Run]
Filename: "{app}\ccoclient.exe"; Description: "启动windows应用"; Flags: nowait postinstall skipifsilent
[code]
procedure InitializeWizard();
begin
WizardForm.LICENSEACCEPTEDRADIO.Checked:=true;
end;
inno setup 的[Files]标签头定义了两行source开头的命令*.*表示所有类型文件,*表示所有文件,后面的Flagsrecursesubdirs应该是当前文件夹下的所有文件或者文件夹(即递归全部的意思)