将jar包转为exe文件再制作成安装包
程序员文章站
2024-02-03 21:08:58
...
使用idea将项目打包成jar包
下载exe4j Wizard并运行,选择项目类型为jar
配置应用名称以及输出的路径文件夹
配置服务名及图标文件
配置输出日志,可以自定义名称
配置服务描述,服务自动启动或手动启动
配置为64位系统程序
配置Java调用,将刚刚打包的jar导入
配置jre版本,导入jre文件
点击finish,jar包转exe成功
下载innoSetup编译器并打开,新建脚本
配置应用程序信息
配置程序输出文件夹名称
将exe4j生成的exe文件作为主执行文件,同时添加其他所需文件
配置应用程序快捷方式
可配置安装时要显示的文档文件
配置安装模式为管理员安装模式
根据需要选择安装语言
选择安装包输出文件夹,文件名,图标,可加入安装密码
使用#define编译指令,可丰富安装界面
完成安装包制作
进入到脚本编辑器,可加入用户自定义功能,比如动态配置数据源,可让用户自定义连接某个数据库,配置代码如下:
[code]
var
myPage:TwizardPage;//定义窗口
myPage2:TwizardPage;
ed1:TEdit;//数据库IP
ed2:TEdit;//数据库名称
ed6:TEdit;//数据库用户名
ed7:TEdit;//数据库用户密码
Lbl1: TNewStaticText;//数据库IP
Lbl2:TNewStaticText;//数据库名称
Lbl6:TNewStaticText;//数据库用户名
Lbl7:TNewStaticText;//数据库用户密码
//定义校验方法,校验失败时,下一步按钮为空
procedure Key_Form_KeyChange(Sender: TObject);
begin
WizardForm.NextButton.Enabled := True;
end;
//初始化引导 窗口
procedure InitializeWizard();
begin
myPage2:=CreateCustomPage(wpWelcome, '自定义数据库设置', '数据库设置');
Lbl1 := TNewStaticText.Create(myPage2);
Lbl1.Left := ScaleX(1);
Lbl1.Top := ScaleY(5);
Lbl1.Width := ScaleX(100);
Lbl1.Height := ScaleY(50);
Lbl1.Caption := '数据库IP';
Lbl1.Parent := myPage2.Surface;
ed1:=TEdit.Create(myPage2);
ed1.Width:=ScaleX(100);
ed1.Left := ScaleY(10);
ed1.Top := ScaleY(25);
ed1.Text :='localhost';
ed1.Parent:=myPage2.Surface;
//ed1.OnChange := @Key_Form_KeyChange;//添加校验方法
Lbl2 := TNewStaticText.Create(myPage2);
Lbl2.Left := ScaleX(10);
Lbl2.Top := ScaleY(80);
Lbl2.Width := ScaleX(100);
Lbl2.Height := ScaleY(50);
Lbl2.Caption := '数据库名称';
Lbl2.Parent := myPage2.Surface;
ed2:=TEdit.Create(myPage2);
ed2.Width:=ScaleX(100);
ed2.Left := ScaleY(10);
ed2.Top := ScaleY(100);
ed2.Text :='YIMADB';
ed2.Parent:=myPage2.Surface;
//ed2.OnChange := @Key_Form_KeyChange;//添加校验方法
Lbl6 := TNewStaticText.Create(myPage2);
Lbl6.Left := ScaleX(10);
Lbl6.Top := ScaleY(155);
Lbl6.Width := ScaleX(100);
Lbl6.Height := ScaleY(50);
Lbl6.Caption := '数据库用户名';
Lbl6.Parent := myPage2.Surface;
ed6:=TEdit.Create(myPage2);
ed6.Width:=ScaleX(100);
ed6.Left := ScaleY(10);
ed6.Top := ScaleY(175);
ed6.Text :='ymdb';
ed6.Parent:=myPage2.Surface;
//ed6.OnChange := @Key_Form_KeyChange;//添加校验方法
Lbl7 := TNewStaticText.Create(myPage2);
Lbl7.Left := ScaleX(10);
Lbl7.Top := ScaleY(230);
Lbl7.Width := ScaleX(100);
Lbl7.Height := ScaleY(50);
Lbl7.Caption := '数据库用户密码';
Lbl7.Parent := myPage2.Surface;
ed7:=TEdit.Create(myPage2);
ed7.Width:=ScaleX(100);
ed7.Left := ScaleY(10);
ed7.Top := ScaleY(250);
ed7.Text :='111111';
ed7.Parent:=myPage2.Surface;
ed7.OnChange := @Key_Form_KeyChange;//添加校验方法
end;
//添加步骤
procedure CurStepChanged(CurStep: TSetupStep);
var
fileName,tempStr:String;
svArray: TArrayOfString;
nLines,i:Integer;
begin
//if CurStep=ssinstall then
//安装前执行
if CurStep=ssPostinstall then
//复制文件后执行
begin
//开始修改文件
fileName := ExpandConstant('{app}\application-other.yml');
LoadStringsFromFile(fileName, svArray);
nLines := GetArrayLength(svArray);//读取文件
for i := 0 to nLines - 1 do
begin
tempStr := svArray[i];
//数据库名
if (1 = Pos(' url: jdbc:postgresql://localhost:5432/XXXXXX', tempStr)) then//查找目标行
begin
svArray[i] := ExpandConstant(' url: jdbc:postgresql://'+ed1.Text+':5432/'+ed2.Text);//修改行
StringChangeEx(svArray[i], '\', '/', True);
end;
//数据库账号
if (1 = Pos(' username: XXXX', tempStr)) then//查找目标行
begin
svArray[i] := ExpandConstant(' username: '+ed6.Text);//修改行
StringChangeEx(svArray[i], '\', '/', True);
end;
//数据库密码
if (1 = Pos(' password: 111111', tempStr)) then//查找目标行
begin
svArray[i] := ExpandConstant(' password: '+ed7.Text);//修改行
StringChangeEx(svArray[i], '\', '/', True);
end;
end;
SaveStringsToFile(fileName, svArray, false);
end;
if CurStep=ssDone then
//安装完成后执行
end;
运行Java程序时,需要有jre运行时环境,当在一台新机上想运行Java程序时必须得有jre和jdk,这样很不友好,所以在用exe4j转exe时,将jre一起配置进去,在编译安装包制作脚本文件时,需要将jre配置放出来,代码如下:
先宏定义一个变量
#define MyJREName "jre"
在Files里将jre配置放出来
[Files]
Source: "C:\Users\A\Desktop\转exe制作安装包准备文件\jre\*"; DestDir: "{app}\{#MyJREName}"; Flags: ignoreversion recursesubdirs createallsubdirs
这样,在一台没有配置jdk和jre的机子上,也能运行Java程序安装包了
然后点击编译(生成安装包到输出文件夹,需手动运行安装包)或运行(编译完立即运行安装包)。
安装包运行效果图:
上一篇: 机器学习实战学习笔记(二)决策树
推荐阅读