什么是类路径?

问题

我刚读这行:

format()方法的第一件事是从名为output.vm的类路径加载Velocity模板

在这种情况下,我无法弄清楚classpath的含义。


#1 热门回答(351 赞)

在使用Java编程时,通过在源文件的顶部放置类似的内容,可以使其他类可用于你正在编写的类:

import org.javaguy.coolframework.MyClass;

或者有时你通过说:"大量导入"东西:

import org.javaguy.coolframework.*;

所以稍后在你的计划中,当你说:

MyClass mine = new MyClass();

Java虚拟机将知道在哪里可以找到已编译的类。

让VM查看机器上的每个文件夹是不切实际的,因此你必须为VM提供要查看的位置列表。这是通过将文件夹和jar文件放在类路径上来完成的。

在我们讨论如何设置类路径之前,让我们来谈谈.class文件,包和.jar文件。

首先,假设MyClass是你作为项目的一部分构建的,它位于项目中名为output的目录中。 .class文件位于output/org/javaguy/coolframework/MyClass.class(以及该包中的每个其他文件)。为了获取该文件,你的路径只需要包含文件夹'output',而不是整个包结构,因为你的import语句将所有信息提供给VM。

现在让我们假设你将CoolFramework捆绑到.jar文件中,并将CoolFramework.jar放入项目的lib目录中。你现在需要将lib/CoolFramework.jar添加到类路径中。 VM将查看org/javaguy/coolframeworkpart的jar文件,并找到你的类。
因此,类路径包含:- JAR文件,和

  • 包层次结构顶部的路径。
    如何设置类路径?
    每个人似乎都学习的第一种方式是使用环境变量。在unix机器上,你可以这样说:
export CLASSPATH=/home/myaccount/myproject/lib/CoolFramework.jar:/home/myaccount/myproject/output/

在Windows计算机上,你必须转到环境设置,并添加或修改已存在的值。

第二种方法是在启动Java时使用-cp参数,如下所示:

java -cp "/home/myaccount/myproject/lib/CoolFramework.jar:/home/myaccount/myproject/output/"  MyMainClass

这种方法的另一种变体是第三种方法,通常使用a.sh.bat文件来计算类路径,并通过-cp参数将其传递给Java。
那么最好的方法是什么?
通过环境变量全局设置内容很糟糕,通常是出于全局变量不好的相同原因。你更改CLASSPATH环境变量,以便一个程序工作,并最终破坏另一个程序。

-cp是要走的路。我通常确保我的CLASSPATH环境变量是一个空字符串,我尽可能地开发它,以便我避免全局类路径问题(当全局类路径为空时,有些工具不高兴 - 我知道两个常见的,千兆美元许可的J2EE和Java服务器,它们的命令行工具存在这种问题)。


#2 热门回答(44 赞)

可以把它想象成Java对PATH环境变量的回答 - 操作系统在PATH上搜索EXE,Java在类路径上搜索类和包。

就像泉水般的问题一样。


#3 热门回答(8 赞)

类路径是Java虚拟机在Java程序中查找用户定义的类,包和资源的路径。

在此上下文中,format()方法从此路径加载模板文件。