一、Java應用程式運行命令
Java應用程式需要有一個入口,而這個入口就是main()方法,包含main()方法的這個Java類叫作主類,JVM規范并沒有規定哪個類是主類,所以我們可以自己創建一個主類,只要包含main()方法即可,
雖然我們可以自定義一個主類,但是如何告訴JVM哪個類是主類呢?實際上JVM是通過java命令來加載并啟動主類,主類名可以由命令列引數指定
我們在cmd命令視窗執行java命令

從回顯中可以看到java命令的具體用法
-
java [-options] class [args...](執行類) -
java [-options] -jar jarfile [args...](執行 jar 檔案)
以執行類為例,用法表明可以向這個java命令傳遞三個引數:
[-options]:選項class:主類名(告訴JVM哪個類是主類)[args...]:main()方法引數(可傳遞多個引數)
其中選項可以分為標準選項和非標準選項,非標準選項以-X開頭

二、Go語言撰寫命令列工具
java命令可以加載并啟動主類,我們首先需要根據java命令的第一種執行類的用法,實作一個命令列工具用來決議執行java命令
首先需要定義一個結構體用來表示命令列選項和引數
/*命令列選項和引數的結構體定義*/
type Cmd struct {
helpFlag bool //幫助選項,輸出幫助資訊
versionFlag bool //版本選項,輸出版本資訊
cpOption string //目錄和 zip/jar 檔案的類搜索路徑,用于搜索類檔案
class string //主類名,用于指定主類
args []string //引數資訊
}
一個命令列結構體,我們就可以描述一個java命令,同時還需要能夠決議這個java命令,所以要定義一個決議命令列的函式
/*Go語言內置了`flag`包可以用來處理命令列選項,`os`包中定義了`Args`變數,其中存放傳遞給命令列的全部引數*/
func parseCmd() *Cmd {
cmd := &Cmd{}
//撰寫printUsage()函式,用來輸出到控制臺
flag.Usage = printUsage
//Var函式用來設定需要決議的選項
flag.BoolVar(&cmd.helpFlag, "help", false, "print help message")
flag.BoolVar(&cmd.helpFlag, "?", false, "print help message")
flag.BoolVar(&cmd.versionFlag, "version", false, "print version and exit")
flag.StringVar(&cmd.cpOption, "classpath", "", "classpath")
flag.StringVar(&cmd.cpOption, "cp", "", "classpath")
//呼叫Parse函式決議選項
flag.Parse()
args := flag.Args()
if len(args) > 0 {
cmd.class = args[0] //第一個引數是主類名
cmd.args = args[1:] //從第二個引數開始往后,都是main()方法的引數
}
return cmd
}
func printUsage() {
fmt.Printf("Usage: %s [-options] class [args...]\n", os.Args[0])
}
Go程式的入口也是main()函式,所以需要創建一個go檔案,里面包含main()函式,然后呼叫parseCmd()函式決議命令列引數,如果決議成功就呼叫startJVM()函式
func main() {
cmd := parseCmd()
if cmd.versionFlag {
fmt.Println("version 1.0")
} else if cmd.helpFlag || cmd.class == "" {
printUsage()
} else {
startJVM(cmd)
}
}
func startJVM(cmd *Cmd) {
fmt.Printf("classpath: %s class:%s args:%v\n", cmd.cpOption, cmd.class, cmd.args)
}
執行編譯出來的exe檔案并測驗

至此就實作了一個簡單的用來決議java命令的命令列工具
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/291445.html
標籤:其他
上一篇:網路協議和Netty(7):常用的網路抓包工具 Wireshark
下一篇:idea安裝python
