我有一个导入org.w3c.dom.Document的文件。编译和运行很好,但我不明白它是如何知道在哪里找到这个包,我只是好奇它是如何工作的。我使用locate命令尝试找到org.w3c.dom,但我什么都没得到。这些包裹在哪里?在我看来,正确的地方是CLASSPATH环境变量,因为我的搜索结果似乎暗示了这一点。它是否正确?无论如何,我不知道如何找出我的CLASSPATH变量。它似乎不是我的shell知道的环境变量。
答案 0 :(得分:3)
JVM使用类路径设置查找类,其中设置了所需包的所有路径。可以通过多种方式设置类路径。你提到的第一个是CLASSPATH环境变量。它是可选的,可以取消设置。第二种方法是“java”可执行文件的显式选项“-cp”。
默认情况下,默认情况下会将一些JRE运行时jar添加到类路径中,因此您不需要自己搜索和添加标准包(特别是您在问题中提到的那个)。
答案 1 :(得分:2)
这将是核心库(rt.jar
)的一部分,所以它就是你安装java JRE的地方;具体在$JAVA_HOME/jre/lib
您可以使用.jar
命令查看jar
个文件。要查看您提到的课程,您可以:
jar tvf rt.jar
这列出了那个jar中的所有类。
请注意,JVM会自动搜索此位置 - 它不需要也不包含在CLASS_PATH环境变量中。 (你可以添加它,但它只是多余的)
为了清晰起见进行编辑:
JVM默认包含<Where_you_installed_jdk>/jre/lib
和<Where_you_installed_jdk>/jre/lib/ext
。您必须通过-cp
选项直接将其传递给java或将其添加到CLASS_PATH
环境变量,才能显式添加任何其他内容。
可以在http://download.oracle.com/javase/6/docs/technotes/tools/findingclasses.html
找到相关文档答案 2 :(得分:0)
尝试从它自己的目录
编译这样的messconvener.java javac -d ..\..\. -cp ..\..\. messconvener.java
-d - 为您的包创建目录结构
-cp - 为用户文件提供类路径,它可以在其中找到用户定义的类