前言:
当前兄弟们对“windows 运行jar”大体比较看重,你们都想要学习一些“windows 运行jar”的相关知识。那么小编同时在网摘上收集了一些关于“windows 运行jar””的相关内容,希望看官们能喜欢,咱们快快来了解一下吧!需求
因为需要批量在客户端启动打印服务,后续涉及到更新版本,人工操作比较繁琐,容易漏操作,所以弄了个简单的exe来启动、重启、更新jar包。
实现思路
通过http请求服务器端,获取版本json文件,然后比较本地是否最新,最后下载jar包启动。
编码
复制
package main
import (
"encoding/json"
"github.com/go-resty/resty/v2"
"io"
"log"
"os"
"os/exec"
"strings"
"time"
)
//打印服务返回
type PrintService struct {
Code int `json:"code"`
Message string `json:"message"`
Data string `json:"data"`
Data2 interface{} `json:"data2"`
Data3 interface{} `json:"data3"`
Data4 interface{} `json:"data4"`
}
//版本
type Version struct {
Version string `json:"version"`
Name string `json:"name"`
UpdateTime string `json:"updateTime"`
}
func main() {
//获取当前路径
path, _ := os.Getwd()
log.Println("开始启动打印服务")
log.Println("获取java版本信息")
time.Sleep(5 * time.Second)
//获取java版本
result, _ := exec.Command("cmd", "/c", "java --version").Output()
javaInfo := string(result)
arrayJava := strings.Split(javaInfo, "\n")
arrJava := strings.Split(arrayJava[0], " ")
log.Println("系统已安装JDK " + arrJava[1])
time.Sleep(1 * time.Second)
//版本json文件
log.Println("检查打印服务是否需要更新")
version := Version{}
verFile := "version.json"
file, err := os.Open(verFile)
defer file.Close()
if err != nil {
//文件不存在,下载json和jar
log.Println("本地没有json和jar包")
GetVersion(&version)
a, _ := json.Marshal(version)
os.WriteFile(verFile, a, 0777)
GetJar(&version)
log.Println("json和jar包已下载")
} else {
log.Println("检查本地json和jar包是否最新版")
var ver Version
GetVersion(&ver)
content, _ := io.ReadAll(file)
json.Unmarshal(content, &version)
if ver.Version != version.Version {
log.Println("本地版本不是最新版,开始更新")
os.Remove(verFile)
GetVersion(&version)
GetJar(&version)
a, _ := json.Marshal(version)
os.WriteFile(verFile, a, 0777)
log.Println("本地版本已更新")
} else {
log.Println("本地版本是最新版")
}
}
v, _ := json.Marshal(version)
log.Println(string(v))
time.Sleep(1 * time.Second)
log.Println("检查服务是否启动")
//生成关闭bat文件
closeFile := "close.bat"
os.Remove(closeFile)
os.Create(closeFile)
cfile, err := os.OpenFile(closeFile, os.O_APPEND, 0777)
defer cfile.Close()
cfile.WriteString("@echo off")
cfile.WriteString("\n")
cfile.WriteString("taskkill /f /im javaw.exe")
cfile.WriteString("\n")
cfile.WriteString("exit")
//生成启动bat文件
batFile := version.Version + ".bat"
os.Remove(batFile)
os.Create(batFile)
bfile, err := os.OpenFile(batFile, os.O_APPEND, 0777)
defer bfile.Close()
bfile.WriteString("@echo off")
bfile.WriteString("\n")
bfile.WriteString("START \"PrintService\" javaw -jar print-2.0.0.jar")
bfile.WriteString("\n")
bfile.WriteString("exit")
//检查服务是否启动
service := PrintService{}
CheckService(&service)
if service.Code == 1 {
log.Println("打印服务已启动")
log.Println("打印服务重启中")
cmdc := exec.Command("cmd", "/c", path+"\\"+"close.bat")
cmdc.Run()
cmdr := exec.Command("cmd", "/c", path+"\\"+version.Version+".bat")
cmdr.Run()
log.Println("打印服务重启完成")
} else {
log.Println("打印服务未启动")
//log.Println(path + "\\" + version.Version + ".bat")
cmds := exec.Command("cmd", "/c", path+"\\"+version.Version+".bat")
cmds.Run()
//res, _ := exec.Command("cmd", "/c", path+"\\"+version.Version+".bat").Output()
//log.Println(string(res))
log.Println("打印服务启动完成")
}
log.Println("启动完成,15秒后自动关闭")
time.Sleep(15 * time.Second)
}
func GetVersion(version *Version) {
client := resty.New()
client.R().
SetResult(version).
ForceContentType("application/json").
Get(";)
}
func GetJar(version *Version) {
client := resty.New()
client.SetOutputDirectory("./")
client.R().
SetOutput("print-" + version.Version + ".jar").
Get("; + "print-" + version.Version + ".jar")
}
func CheckService(service *PrintService) {
client := resty.New()
client.R().
SetResult(service).
ForceContentType("application/json").
Get(";)
}
标签: #windows 运行jar