java -cp 和 -jar

253 阅读1分钟

不完全一样。java -cpjava -jar 命令有不同的用途和行为:

  1. java -cpjava --classpath

    • 这个选项用于指定类路径(classpath),即 Java 虚拟机(JVM)查找用户编译的类文件和包的位置。
    • 当你使用 java -cp jarfile.jar org.example.MainClass 命令时,你是在告诉 JVM 在 jarfile.jar 中查找 org.example.MainClass 类,并且这个类必须在 JAR 文件的根路径下。
    • 这种方式适用于当你需要运行的类不在 JAR 文件的 META-INF/MANIFEST.MF 文件中指定为主类时。
  2. java -jar

    • 这个选项专门用于运行 JAR 文件。
    • 当你使用 java -jar jarfile.jar 命令时,JVM 会查找 JAR 文件中的 META-INF/MANIFEST.MF 文件,读取其中的 Main-Class 属性来确定要运行的主类。
    • 如果你在使用 java -jar 后面跟上类名,如 java -jar jarfile.jar org.example.MainClass,这实际上是不正确的用法,因为 java -jar 命令不接受类名作为参数。正确的做法是让 JAR 文件的 MANIFEST.MF 文件指定主类,或者使用 java -cp 来指定类名。

总结来说,java -cp 允许你指定类路径和要运行的类名,而 java -jar 用于运行 JAR 文件中的主类,不需要指定类名。如果你需要运行 JAR 文件中的非主类,应该使用 java -cp