Skip to content

打包内容: Java,MySQL,Springboot JAR + 第三方dll组件。

对于一些简单的WEB应用,使用诸如java,SQL,JAR/WAR期望将其统一打包成一个EXE安装包进行安装,并将其注册为Windows的服务。@anarkh

2019-03-14 JWS在新版本中要收费,我去他大爷的。配置起来这么麻烦,远不及winsw.

准备

  • favicon.ico
  • JDK 免安装版本
  • MySQL免安装版本
  • Java Service Wrapper

工具

Inno Setup第一印象参考:

下载 Inno Setup Compile 5.6.

依据引导配置生成如下代码:

bash
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!






[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{038D6A71-180E-4CAB-AC9B-20DFFC791881}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
DefaultDirName=D:\khkj-store
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputDir=C:\Users\anarkh\Desktop\khkj_resources
OutputBaseFilename=Setup
SetupIconFile=C:\Users\anarkh\Desktop\khkj_resources\favicon.ico
Password=khkj
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Files]
Source: "C:\Users\anarkh\Desktop\kjkj-store-install\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"

[Run]
Filename: "{app}\install\install.bat";

[UninstallRun]
Filename:"{app}\uninstall\uninstall.bat";

JDK

JDK 的安装需要考虑

  • 下载JDK免安装版本
  • 环境变量 - JAVA_HOME, CLASS_PATH,PATH
  • JDK 的版本 - 特别要考虑jar和dll对版本的依赖
  • 将dll放置到jdk bin下,最好也放一份到jre下面

MySQL

MySQL 的安装需要考虑

SpringBoot生成的web app 的jar

有两种方式Java Services Wrapper和winsw

winsw

conf配置文件,xml 格式的 参考

官网

包下载

其它参考资料

JWS方式

参考

JWS下载

JWS官网

对于 JSW如果是用Springboot的JAR运行,特别要注意要使用springboot的jarlauncher类,而不是main class 所在的类,这是一个很大的坑 JSW配置参考如下:

bash
wrapper.lang.folder=..\lang






wrapper.java.command=..\..\..\java\jdk_1.8_win32\bin\java












wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp



wrapper.java.classpath.1=..\lib\store.jar
wrapper.java.classpath.2=..\lib\wrapper.jar


wrapper.java.library.path.1=..\lib\


wrapper.java.additional.auto_bits=FALSE


wrapper.java.additional.1=








wrapper.app.parameter.1=org.springframework.boot.loader.JarLauncher








wrapper.console.format=PM


wrapper.console.loglevel=INFO


wrapper.logfile=../logs/wrapper.log


wrapper.logfile.format=LPTM


wrapper.logfile.loglevel=INFO





wrapper.logfile.maxsize=0



wrapper.logfile.maxfiles=0


wrapper.syslog.loglevel=NONE





wrapper.ignore_sequence_gaps=TRUE


wrapper.pidfile.strict=TRUE


wrapper.console.title=Test Wrapper Sample Application





wrapper.check.deadlock=TRUE
wrapper.check.deadlock.interval=10
wrapper.check.deadlock.action=RESTART
wrapper.check.deadlock.output=FULL



wrapper.filter.trigger.999=wrapper.filter.trigger.*java.lang.OutOfMemoryError
wrapper.filter.allow_wildcards.999=TRUE
wrapper.filter.action.999=NONE

wrapper.filter.trigger.1000=[Loaded java.lang.OutOfMemoryError
wrapper.filter.action.1000=NONE

wrapper.filter.trigger.1001=java.lang.OutOfMemoryError



wrapper.filter.action.1001=RESTART
wrapper.filter.message.1001=The JVM has run out of memory.



































wrapper.event.jvm_restart.email.body=The JVM was restarted.\n\nPlease check on its status.\n










wrapper.name=khkj-store-web


wrapper.displayname=khkj-store-web


wrapper.description=khkj-store-web


wrapper.ntservice.dependency.1=


wrapper.ntservice.starttype=AUTO_START


wrapper.ntservice.interactive=FALSE

部署脚本

Install

bash
@echo off

echo  Step 1: Install Java JDK

echo  ------begin----

:: 退到上级目录

cd ..

:: 获取jdk 的全路径,全路径=当前路径+jdk路径

:: "%~dp0" 这个是最起始的条用bat的cmd 的路径 所以我们要使用cd ..后退一个目录后用"%cd%" 来获取当前目录

echo  "%~dp0"

echo "%cd%"

::设置jdkpath变量

set jdkpath=%cd%\java\jdk_1.8_win32

echo %jdkpath%

::setx variable value -m

:: setx 这个是用来设置环境变量的,并且会写入注册表. variable,会被覆盖,此操作不可逆的

:: variable 代表键    value代表值    -m代表写入系统环境变量,如果没有该参数会写入当前用户环境变量.

setx JAVA_HOME  "%jdkpath%"  -m

setx CLASSPATH  ".;%%JAVA_HOME%%\lib\tools.jar;%%JAVA_HOME%%\lib\dt.jar" -m

::追加path环境变量  find 后面/i代表忽略大小写  &&执行成功执行的命令  ||执行失败执行的命令

set installedJDK=false

echo %Path%|find /i "%JAVA_HOME%" && set installedJDK=true

if %installedJDK% == false setx Path "%%JAVA_HOME%%\bin;%Path%"
  
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_SZ /d "%Path%;%%JAVA_HOME%%\bin;%%JAVA_HOME%%\jre\bin" /f


echo ----install zkemkeeper---

echo "%cd%"

::copy %cd%\dll\zkemkeeper.dll C:\Windows\SysWOW64
copy %cd%\dll\zkdll\* C:\Windows\SysWOW64
C:\Windows\SysWOW64\regsvr32  C:\Windows\SysWOW64\zkemkeeper.dll


echo ----install khkj-db

"%cd%\mysql\mysql-5.7.24-winx64\bin\mysqld.exe" install khkj-db

net start khkj-db

sc config khkj-db start=auto

::echo ----install khkj-store-web
::%cd%\store-app\wrapper\bin\wrapper -it  %cd%/store-app/wrapper/conf/store.conf

exit

Uninstall

bash
@echo off

title 正在卸载中,请不要关闭

color 0a

::echo 停止并删除khkj-store-web

::net stop khkj-store-web

::sc delete khkj-store-web


echo 停止并删除MySQL

net stop khkj-db

sc delete khkj-db


echo 删除环境变量

echo 删除Java环境中...

reg delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v JAVA_HOME /f

reg delete "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v CLASSPATH /f


echo 删除成功

其它

Process Explorer

Process Explorer使用图文教程, 可以用来查看Windows详细进程:

Session0穿透

Windows 常用的命令

Chrome WEB-Driver配置参数

JAVA从终端获取输入

中控考勤机配置