【问题标题】:How should I set CLASSPATH?我应该如何设置 CLASSPATH?
【发布时间】:2010-01-07 02:26:56
【问题描述】:

我以前做过:

CLASSPATH=".:/home/phoenies/jdk1.6.0_17/lib/tools.jar:/home/phoenies/jdk1.6.0_17/lib/dt.jar"

但今天一篇文章说我应该这样做:

CLASSPATH=".:/home/phoenies/jdk1.6.0_17/lib"

如果我这样做,它会搜索 lib 中的所有 jar 文件吗?所以这可能是一种更短的方式?

【问题讨论】:

标签: java classpath


【解决方案1】:

由于您使用的是 JDK6,因此可以使用类路径通配符:CLASSPATH=".:/home/phoenies/jdk1.6.0_17/lib/*" 将匹配 lib/ 中的所有 JARS

查看http://java.sun.com/javase/6/docs/technotes/tools/windows/classpath.html 有一个名为“了解类路径通配符”的部分

【讨论】:

  • 感谢您的及时答复:)
  • 非常有趣。 +1。但是,我反对使用“应该”,因为加载文件没有明确的顺序,因此如果您的目录中有多个包含同一类的不同版本的 jar,则可能会出现意外行为。
  • 你是对的,在这种情况下,显式加载 jar 更好。当您有一组独立的 jar 文件要加载时,使用通配符是一个很好的解决方案。最好有 duffymo 建议的 ant 脚本。
【解决方案2】:

我认为除了最简单的“Hello, World”教程之外,使用 CLASSPATH 环境变量是错误的。

正确的做法是在编译运行时为每个项目设置CLASSPATH。每个项目都可能不同,所以这很有意义。

IDE 忽略 CLASSPATH 环境设置;所有 Java EE 应用服务器也是如此。它是 Java 1.0 的遗留物。我没有在我工作的任何机器上设置 CLASSPATH。

学习为命令行编写脚本。或者使用蚂蚁。你会很高兴你这样做了。

【讨论】:

  • 哦,我以为这只是一个约定。
【解决方案3】:

是的,如果你用第二种方法,它将搜索 lib 中的所有 jar 文件。看到类路径的设置与第一个一样,这很奇怪。我想在您想确定正在加载哪些 jar 的服务器上,这可能是限制它们的一种方法,但如果您有多个 jar,您可能会遇到问题。

【讨论】:

  • 真的吗?过去,classpath 中目录的定义一直是寻找裸露的 .class 文件。
  • 错了。您必须单独列出 JAR。
【解决方案4】:

Jar 文件需要在 Classpath 变量中指定名称。需要注意的一点是,命令行-classpath 参数比环境变量更通用,因为它允许您为每个应用程序设置一个类路径。

【讨论】:

    【解决方案5】:

    在 Java 1.6+ 中,您可以将类路径设置为一个目录,后跟 /* 以加载该目录中的所有 JAR 文件。不只是目录名称 - 这是用于在该目录和子目录中加载类文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-14
      • 1970-01-01
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 1970-01-01
      • 2021-09-03
      相关资源
      最近更新 更多