【问题标题】:Java -classpath optionJava -classpath 选项
【发布时间】:2023-03-21 04:09:01
【问题描述】:

是否将-classpath 选项与java 一起使用,添加或替换CLASSPATH 环境变量的内容?

【问题讨论】:

  • 好问题。我从来没想过
  • 你想知道环境变量是否改变了吗?您是否进行了测试以实际查看它是否发生了变化?
  • 为什么不自己试试呢?
  • @Zacky112,请注意,使用 -jar 选项运行 jar 文件将忽略 CLASSPATH 环境变量。

标签: java jvm classpath environment-variables jvm-arguments


【解决方案1】:

是的。引用自 java(1) 手册页:

   -classpath classpath
   -cp classpath
          Specifies a list of directories, JAR archives, and ZIP archives to search  for  class  files.   Class
          path  entries  are separated by colons (:). Specifying -classpath or -cp overrides any setting of the
          CLASSPATH environment variable.

          If -classpath and -cp are not used and CLASSPATH is not set, the user class path consists of the cur-
          rent directory (.).

【讨论】:

  • 环境变量根本没有更新,据此。我看不出答案是“是”。
  • @S.Lott - 从谁的角度来看?从程序的 角度来看,CLASSPATH 值(如果存在)被替换。从 shell 的 角度来看,CLASSPATH 值没有改变。我认为最初的问题措辞不当。
【解决方案2】:

使用其中一个选项,而不是两者。

指定 -classpath 或 -cp 会覆盖 CLASSPATH 环境变量的任何设置。

...

-classpath 选项是首选,因为您可以为每个应用程序单独设置它,而不会影响其他应用程序,也不会其他应用程序修改其值。

...

设置 CLASSPATH 变量或使用 -classpath 命令行选项会覆盖该默认值,因此如果要将当前目录包含在搜索路径中,则必须包含“.”在新设置中。

【讨论】:

  • 关于最后一点,还是这样吗?当我运行java -cp tests Test.java 时,它似乎仍在从.(当前工作目录)中发现类。
【解决方案3】:

使用 -cp 选项不会影响 CLASSPATH 环境变量。

你可以试试这个小代码sn-p来检查:

public class CPTest {
    public static void main (final String[] args) {
        String cp = System.getenv("CLASSPATH");
        System.out.println(cp);
    }
}
%echo $CLASSPATH  
/home/test/:.

不带 -cp 选项的输出:

%java CPTest  
/home/test/:.

带有 -cp 选项的输出:

%java -cp /home/xanadu:. CPTest  
/home/test/:.

两次调用的输出相同(一个带有 -cp 一个没有)。

CLASSPATH 环境变量中指定的路径也是
使用或使用 -cp 选项指定的路径。它不是两者的混合 它就是其中之一。

从下面的调用中可以明显看出这一点。 如果 CWD(当前工作目录 "."
从 -cp 选项中排除,JVM 启动器(即 java)找不到
类文件,尽管 CLASSPATH 环境变量中包含 CWD (".")。

%java -cp /home/test CPTest
Exception in thread "main" java.lang.NoClassDefFoundError: CPTest

【讨论】:

    【解决方案4】:

    使用类路径变量,它会覆盖环境变量的 CLASSPATH,但仅适用于该会话。如果您重新启动应用程序,您需要再次设置类路径变量。

    【讨论】:

    • 完美。感谢 girienie 的简洁回答。你一定是 Java 专家 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 2020-11-11
    • 2023-03-14
    • 2011-12-07
    相关资源
    最近更新 更多