1. Java命令
Java 虚拟机的工作是运行 Java 应用程序。和其他类型的应用程序一样,Java 应用程序也需要一个入口点,这个入口点就是我们熟知的 main() 方法。如果一个类包含 main() 方法,这个类就可以用来启动 Java 应用程序,我们把这个类叫作主类。最简单的 Java 程序是只有一个 main() 方法的类,如著名的 HelloWorld 程序。
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, world! ");
}
}
那么 Java 虚拟机如何知道我们要从哪个类启动应用程序呢?对此,Java 虚拟机规范没有明确规定。也就是说,是由虚拟机实现自行决定的。比如 Oracle 的 Java 虚拟机实现是通过 java 命令来启动的,主类名由命令行参数指定。java 命令有如下 4 种形式:
java [-options] class [args]
java [-options] -jar jarfile [args]
javaw [-options] class [args]
javaw [-options] -jar jarfile [args]
可以向 java 命令传递三组参数: 选项、主类名(或者 JAR 文件名) 和 main() 方法参数。选项由减号(-)开头。通常,第一个非选项参数给出主类的完全限定名 (fully qualified class name)。但是如果用户提供了 -jar 选项,则第一个非选项参数表示 JAR 文件名,java 命令必须从这个 JAR 文件中寻找主类。javaw 命令和 java 命令几乎一样,唯一的差别在于,javaw 命令不显示命令行窗口,因此特别适合用于启动 GUI (图形用户界面) 应用程序。
2. 编写命令行工具
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 创建项目
➜ 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 打开项目
IDEA 安装 Rust 插件

我的 MacBookPro 是 M2 ,brew 安装的 Rust , 配置 Rust 目录
/opt/homebrew/Cellar/rust/1.70.0
2.4 项目分包
用 Cargo 的 workspaces 功能来组织代码。workspaces 允许将多个相关的 Rust 包组合成一个单一的逻辑单元,以便更轻松地管理和构建。

3. 编写一个简单的 javac
用 clap 来解析命令行参数