CLASSPATH和PATH中的混淆

时间:2010-02-10 18:28:57

标签: java classpath

我在命令提示符下运行java程序。我在PATH系统变量中设置了“C:\ j2sdk1.4.2_09 \ bin”。然后我就可以编译并运行程序了。但是因为我需要设置mysql-connector我在“C:\”中设置了它MySQL的连接器的Java-5.1.10 \ MySQL的连接器的Java-5.1.5-bin.jar” CLASSPATH变量,但现在我能够编译程序,因为我运行程序,我得到“线程主java.lang.NoClassFoundDefError中的异常”。 这怎么样?任何人都可以详细说明这个吗?

3 个答案:

答案 0 :(得分:5)

目前还不清楚你在这里问的是什么。你是说你改变了你的CLASSPATH,现在找不到课程了吗?

要记住的一件事是,默认情况下,CLASSPATH不包含当前目录。如果你想在CLASSPATH中使用它,你必须添加它(.),例如:

set CLASSPATH=.;C:\mysql-connector-java-5.1.10\mysql-connector-java-5.1.5-bin.jar

(注意我在开头放了一个.;。)

PATH和CLASSPATH完全不相关。 PATH告诉Windows在运行它们时如何查找可执行程序(并隐式包含当前目录),而不给它显式路径。 CLASSPATH告诉Java运行时它可以从哪里加载类。

道歉,如果这完全偏离基础;如果是的话,你能澄清一下你的问题吗?

答案 1 :(得分:0)

同意上面的答案,因为我自己已经完成了这一百万次。你得到的例外几乎肯定与你的类路径有关,不包括“。”。它告诉Java将当前目录包含在类的死亡中。

似乎反直觉Java不会在搜索中自动包含当前目录,但只要您手动覆盖类路径,就必须包含它。

原因?如果未指定类路径,则使用默认值,包括“。”,这对您来说是透明的。

答案 2 :(得分:0)

在回答你的问题之前,请回答这个简单的问题:为什么我们需要PATH和CLASSPATH?

答案:

1)路径:您需要设置PATH来编译Java源代码,创建JAVA CLASS FILES和操作系统以在运行时加载类。

2) CLASSPATH: Java中的类路径是目录或目录列表的路径,ClassLoaders用它来查找和加载Java程序中的类。这由JVM使用,而不是由OS使用。 / p>

修改 PATH 变量(Windows系统环境变量),使其指向包含所有exe的bin dir,例如:java,javac等。在我的例子中,它是这样的: ; C:\ Program Files \ Java \ jre7 \ bin

可以使用CLASSPATH环境变量指定

Classpath ,该变量不区分大小写,-cp或-classpath命令行选项或Java中JAR文件中manifest.mf文件中的Class-Path属性。

有关CLASSPATH的详细信息,请参阅此链接“http://javarevisited.blogspot.in/2011/01/how-classpath-work-in-java.html