記錄一下(針對 Windows 的加密摘悴、打包殃恒、安裝梨水、運行)
一般都很少人會使用 JavaFX 去寫桌面程序休雌,但是因為某些原因导俘,不得不使用暮蹂,并且還需要對外發(fā)布安裝包甫题。為了防止代碼被看到(因為 jar 包是類似于壓縮包授嘀,解壓就能看到全部內(nèi)容)憨琳,所以使用了 xjar 進行加密诫钓。
xjar_github
首先按照 github 的 readme 將 jar 包引入,并且增加 xjar-plugin篙螟。
// 打包命令
mvn clean package -Dxjar.password=自定義的密碼
打包后菌湃,會出現(xiàn)一個 xjar.go 文件,這個文件就是執(zhí)行文件遍略,通過該文件去執(zhí)行 java -jar ***.xjar 去運行 jar包惧所,從而將加密后的 javafx 程序運行起來
maven 打包后骤坐,target 目錄下有幾個關(guān)鍵文件
- ***.jar -- 未加密的 jar 包
- ***.xjar -- 加密后的 jar 包
- xjar.go -- 真正執(zhí)行文件
這個時候的運行命令是 xjar.go java -jar ***.xjar
此時,還需要將這些文件打包成安裝包下愈,并且需要有一個可執(zhí)行文件用來安裝后運行纽绍。
因為 xjar.go 是真正運行文件,所以就需要將 xjar.go 編譯成 .exe 文件势似,這個可以使用 go 官方的命令
go build
(go build 具體參數(shù)不寫了拌夏,如果需要打包其他相關(guān)文件到同一個exe,還有圖標等履因,百度都有)
如果需要 go 編譯后的 .exe 文件能直接運行障簿,而不是執(zhí)行上述命令(雙擊 .exe 文件直接運行)
則需要對 maven 打包出的 xjar.go 做億點點改造(本機沒 xjar.go 文件了,所以直接文字說明吧)
通過觀察 xjar.go 文件發(fā)現(xiàn)栅迄,內(nèi)部是通過調(diào)用 cmd 命令行來直接執(zhí)行 java -jar ***.xjar
的站故。
具體的入口在 main()
方法,里面會拿到傳入的參數(shù)(就是 java -jar ***.xjar
)毅舆,這三個參數(shù)西篓,然后去調(diào)用后續(xù)方法。
- 首先將第一個參數(shù)
java
拿出來憋活,作為執(zhí)行命令 - 后面的參數(shù)作為
java
命令的執(zhí)行參數(shù)岂津,如果要設置某些如-Xmx
這些,則放在第一個參數(shù)后面余掖,倒數(shù)第一寸爆、第二個參數(shù)前面 - 倒數(shù)第二個參數(shù)會作為
-jar
,如果不是會報錯 - 倒數(shù)第一個參數(shù)就是執(zhí)行的
xjar
包
// 這是生成 xjar.go 中獲取 jar 包名稱的方法盐欺,會直接尋找 -jar 參數(shù)的下一個參數(shù)作為執(zhí)行的 jar 包名稱
// find jar name from args
func JAR(args []string) (string, error) {
var jar string
l := len(args)
for i := 1; i < l-1; i++ {
arg := args[i]
if arg == "-jar" {
jar = args[i+1]
}
}
if jar == "" {
return "", errors.New("unspecified jar name")
}
return jar, nil
}
因為默認參數(shù)是要自己傳的(看xjar.go java -jar ***.xjar
能看出來)赁豆,所以為了讓直接執(zhí)行 xjar.go
能有這種效果,則直接修改生成的 xjar.go
文件
在
main()
入口處冗美,直接寫死運行命令魔种,將main()
方法傳入的 args[] 手動賦值
- 把 args[0] 賦值成 java
- 后續(xù)的賦值成啟動參數(shù)
- 最后兩個為
-jar
和***.xjar
上述操作完成后,運行 xjar.go 就能直接啟動 jar包了粉洼,但是這個時候發(fā)現(xiàn)會彈出 cmd 窗口來執(zhí)行节预,所以還要隱藏
將 xjar.go 打包成 exe 的命令換成 go build -ldflags="-H windowsgui"
// 并且在這行代碼下添加下面那行代碼
cmd := exec.Command(java, args...)
// 添加的代碼
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
這個實現(xiàn)運行打包后的 xjar.exe
就能隱藏彈窗直接啟動 jar
包了
最后就是使用 inno setup 打包成安裝包了。
具體執(zhí)行文件直接選 xjar.exe 那個文件属韧,這個文件自己修改名稱安拟。xjar 包和其他需要的文件夾也一起打包進去,為加密的 Jar 包就不需要了宵喂。具體的打包方法直接百度就好了糠赦。