自己动手写Java虚拟机
上QQ阅读APP看书,第一时间看更新

2.2 准备工作

从第2章开始,每章的代码都是建立在前一章的基础之上。把ch01目录复制一份,然后改名为ch02。因为本章要创建的源文件都在classpath包中,所以在ch02目录中创建一个classpath子目录。现在目录结构看起来应该是这样:

D:\go\workspace\src
—-jvmgo
  —-ch01
  —-ch02
    —-classpath
    —-cmd.go
    —-main.go

我们的Java虚拟机将使用JDK的启动类路径来寻找和加载Java标准库中的类,因此需要某种方式指定jre目录的位置。命令行选项是个不错的选择,所以增加一个非标准选项-Xjre。打开ch02\cmd.go,修改Cmd结构体,添加XjreOption字段,代码如下:

type Cmd struct {
helpFlag         bool
versionFlag     bool
cpOption         string
XjreOption      string
class             string
args              []string
}

parseCmd()函数也要相应修改,代码如下:

func parseCmd() *Cmd {
cmd := &Cmd{}
flag.Usage = printUsage
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")
flag.StringVar(&cmd.XjreOption, "Xjre", "", "path to jre")
flag.Parse()
... //其他代码不变
}