1. Java命令
Java 虛擬機(jī)的工作是運(yùn)行 Java 應(yīng)用程序。和其他類(lèi)型的應(yīng)用程序一樣,Java 應(yīng)用程序也需要一個(gè)入口點(diǎn),這個(gè)入口點(diǎn)就是我們熟知的 main() 方法。如果一個(gè)類(lèi)包含 main() 方法,這個(gè)類(lèi)就可以用來(lái)啟動(dòng) Java 應(yīng)用程序,我們把這個(gè)類(lèi)叫作主類(lèi)。最簡(jiǎn)單的 Java 程序是只有一個(gè) main() 方法的類(lèi),如著名的 HelloWorld 程序。
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, world! ");
}
}
那么 Java 虛擬機(jī)如何知道我們要從哪個(gè)類(lèi)啟動(dòng)應(yīng)用程序呢?對(duì)此,Java 虛擬機(jī)規(guī)范沒(méi)有明確規(guī)定。也就是說(shuō),是由虛擬機(jī)實(shí)現(xiàn)自行決定的。比如 Oracle 的 Java 虛擬機(jī)實(shí)現(xiàn)是通過(guò) java 命令來(lái)啟動(dòng)的,主類(lèi)名由命令行參數(shù)指定。java 命令有如下 4 種形式:
java [-options] class [args]
java [-options] -jar jarfile [args]
javaw [-options] class [args]
javaw [-options] -jar jarfile [args]
可以向 java 命令傳遞三組參數(shù): 選項(xiàng)、主類(lèi)名(或者 JAR 文件名) 和 main() 方法參數(shù)。選項(xiàng)由減號(hào)(-)開(kāi)頭。通常,第一個(gè)非選項(xiàng)參數(shù)給出主類(lèi)的完全限定名 (fully qualified class name)。但是如果用戶(hù)提供了 -jar 選項(xiàng),則第一個(gè)非選項(xiàng)參數(shù)表示 JAR 文件名,java 命令必須從這個(gè) JAR 文件中尋找主類(lèi)。javaw 命令和 java 命令幾乎一樣,唯一的差別在于,javaw 命令不顯示命令行窗口,因此特別適合用于啟動(dòng) GUI (圖形用戶(hù)界面) 應(yīng)用程序。
2. 編寫(xiě)命令行工具
2.1 Rust 版本
(base) ? Downloads cargo -V
cargo 1.70.0 (ec8a8a0ca 2023-04-25)
(base) ? Downloads rustc -V
rustc 1.70.0 (90c541806 2023-05-31) (built from a source tarball)
2.2 創(chuàng)建項(xiàng)目
? hub cargo new rjvm
Created binary (application) `rjvm` package
? hub cd rjvm
? rjvm git:(master) ? ll
total 8
-rw-r--r-- 1 stg staff 173B Jun 15 17:00 Cargo.toml
drwxr-xr-x 3 stg staff 96B Jun 15 17:00 src
2.3 打開(kāi)項(xiàng)目
IDEA 安裝 Rust 插件

我的 MacBookPro 是 M2 ,brew 安裝的 Rust , 配置 Rust 目錄
/opt/homebrew/Cellar/rust/1.70.0
2.4 項(xiàng)目分包
用 Cargo 的 workspaces 功能來(lái)組織代碼。workspaces 允許將多個(gè)相關(guān)的 Rust 包組合成一個(gè)單一的邏輯單元,以便更輕松地管理和構(gòu)建。

3. 編寫(xiě)一個(gè)簡(jiǎn)單的 javac
用 clap 來(lái)解析命令行參數(shù)