想让自己制作的jar包跟随系统启动而启动有两种方式:
1、制作bat文件 将启动命令放入其中,然后将bat的快捷方式放入系统启动目录,具体如下
如我有一个spring boot制作的jar包 放在了D:\developsoft\JDK\cloudterm.jar 的位置,另外本机有多个JDK 此jar包运行的JDK版本偏高,我不想设置环境变量 则 批处理脚本如下
cd d:
cd D:\developsoft\JDK\jdk1.8.0_131\bin
java -Dfile.encoding=utf-8 -jar D:\developsoft\JDK\cloudterm.jar
其中 -Dfile.encoding=utf-8 是解决 springboot 打包常见的 乱码问题
可以直接切换到 jdk bin目录下执行 具体路径位置的jar包
然后把此bat脚本 创建 快捷方式 放入C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 即可
此方法不必依赖任何系统库缺点是 会有控制台,不过我本人挺喜欢控制台开着的.只是怕被别人随手关掉.
2、采用winsw制作成系统服务, 具体如下
github
下载
- 将WinSW.exe文件复制到java程序所在文件夹中。
- 将java程序重命名,去掉名称中的“.”。例如test-1.0.jar ----> test.jar
- 将WinSW.exe重命名为与jar包名称一样 如 test.exe
- 新建一个xml文件,命名为与jar包名称一样 如test.xml,写入以下内容
<configuration>
<!-- ID of the service. It should be unique accross the Windows system-->
<id>Tomcat8forULP</id>
<!-- Display name of the service -->
<name>Tomcat8forULP</name>
<!-- Service description -->
<description>Tomcat8forULP</description>
<!-- Path to the executable, which should be started -->
<executable>java</executable>
<arguments> -jar "%BASE%\mrps-web.jar"</arguments>
<log mode="append">
<!--
<setting1/>
<setting2/>
-->
</log>
</configuration>
其中 如果jdk没有配置环境变量 可以在内写入完整的 java命令的路径 如 D:\developsoft\JDK\jdk1.8.0_131\bin\java
内可以写入任意参数 如我这里就写入了 -Dfile.encoding=utf-8 -jar “D:\developsoft\JDK\cloudterm.jar”
里面配置日志的等级和目录,一般不需要配置,默认会在安装目录
然后 以管理员身份打开 cmd cd到此目录下 执行重命名后的exe文件 如 test.exe install 即可安装服务成功
卸载服务 test.exe uninstall
补充说明
启动目录在win10下是
C盘(系统盘)\用户\ray(你自己的用户)\AppData\Roaming\Microsoft\Windows\「开始」菜单\程序\启动
放入开启启动目录避免控制台的方法就是制作vbs脚本 如startup.vbs 放在同级目录
set ws=WScript.CreateObject("WScript.Shell")
ws.Run "startup.bat",0
startup.bat就是原本的bat启动脚本
另:
放在启动目录的话 必须用户有登录才会运行。
如果是服务的话 没登录也可以运行
如果是带swing界面的应用 一般情况下不能做成服务 因为那样界面出不来,即使有各种各样可能实现服务出界面的办法也都可能随环境不同而失效,至少我没有找到一个真正有效的办法.
所以如果应用带swing界面 只能有放入开始菜单一种办法.
如果制作的应用带有swing界面 又非要做成服务以支持开启自启 还不需要登录,那么 考虑 可以将swing页面和服务分割开来,采用udp 或者tcp通信控制和展示