龙空技术网

golang在windows下调用更新启动jar包

一耳听世界 167

前言:

当前兄弟们对“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