一、解析命令行参数

  本章实现的是使用命令行java命令启动java虚拟机,运行java应用,对传入的参数进行解析。参数主要包括java应用的路径(也就是classpath),main方法所在的类路径,jre路径。

  cmd.go使用go的flag类库对参数进行解析,参数格式

Usage: %s [-options] class [args...]
func readCmd() *Cmd {
	cmd:=new(Cmd)
	flag.BoolVar(&cmd.helpFlag,"help",false,"print help message")
	flag.BoolVar(&cmd.versionFlag,"version",false,"print version message")
	flag.StringVar(&cmd.classpath,"cp","","classpath")
	flag.StringVar(&cmd.jrePath,"jre","","jre path")
	flag.Parse()
	args:=flag.Args()
	if len(args)>0{
		cmd.mainClass=args[0]
		cmd.args=args[1:]
	}
	return cmd
}

如果用户没有输入classpath或jre路径,可以从环境变量中获取默认路径。

func main()  {
	cmd:=readCmd()
	if cmd.helpFlag{
		printUsage()
		return
	}

	if cmd.versionFlag{
		fmt.Println("jvmgo version 1.0")
		return
	}

	if cmd.mainClass==""{
		fmt.Println("Please input main class")
		return
	}
	if cmd.classpath==""{
		cmd.classpath=os.Getenv(CLASS_PATH)
	}
	if cmd.jrePath==""{
		cmd.jrePath=os.Getenv(JAVA_HOME)+"\\jre"
	}
	startJVM(cmd)
}

获取到命令行参数后,就可以根据参数开始启动jvm了,启动jvm的过程会在后面几章介绍。

github地址:https://github.com/congye6/jvmgo

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值