Javac vs Java in -classpath选项

Rol*_*all 11 java javac classpath

是什么在调用的差异-classpath从选项javac,并从java

例如:

javac -classpath MyJar.jar GetJar.java
java -classpath MyJar.jar:. GetJar
Run Code Online (Sandbox Code Playgroud)

它的工作原理如下:

javac -classpath MyJar.jar GetJar.java
java GetJar
Run Code Online (Sandbox Code Playgroud)

所以基本上相关的第一个类路径javac需要在那里,另一方面在java命令行中它可能是可选的.为什么?你知道在什么情况下它是强制性的.更一般来说,被-classpath调用的效果是javac什么,被-classpath调用的效果是什么java.

提前致谢.

Per*_*ion 11

一个是用于编译的类路径.另一个是用于运行的类路径.而且他们必须是同样的事情.编译过程所需的类集是所有正在编译的类所引用的类.而您的运行时JAR可能正在调用具有空main方法且没有依赖项的独立类.

请记住,在运行时类依赖项是动态解析的,即只在需要时才加载类(这是一种泛化,始终加载引导和系统类).