Bash中exec java <主类>命令的运行原理及相关疑问
关于Bash脚本中执行Java主类的运行机制解析
核心误解澄清
你看到的exec /usr/lib/jvm/jre/bin/java <参数> -cp <jar包路径> com.amazon.kinesis.streaming.agent.Agent命令,并不是直接调用.java源文件,这里的com.amazon.kinesis.streaming.agent.Agent是编译后的Java类的全限定类名,对应已经存在的.class文件(通常被打包在jar包里)。
命令运行机制
-cp(classpath,类路径)是关键参数:它告诉JVM去哪里寻找要执行的Java类文件。这里指定的jar包路径,就是包含Agent类的编译后文件的位置(jar包本质是压缩文件,内部存放着编译好的.class二进制文件)。- JVM执行流程:当你运行这个命令时,JVM会先根据classpath找到对应的jar包,解压读取其中的
Agent.class文件,然后执行该类中的main方法——这是Java程序标准的运行方式,和直接运行java -jar xxx.jar本质是一样的,只是后者把主类信息写在了jar包的MANIFEST.MF文件里,不需要手动指定类名。
是否会生成二进制文件?
这个运行命令本身不会生成新的二进制文件。编译步骤早已在脚本执行前完成:Kinesis Agent的开发者已经将所有.java源文件编译成了.class二进制文件,并打包成jar包,脚本只是负责指定JVM的位置、类路径和要执行的主类,让JVM能找到并运行已编译好的代码。
内容的提问来源于stack exchange,提问作者user313
相关产品推荐
相关产品推荐

