小编典典

使用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(以及该软件包中的所有其他文件)。为了到达该文件,你的路径只需要包含文件夹“输出”,而不是整个包结构,因为你的import语句将所有这些信息提供给VM。

现在,假设你将CoolFramework捆绑到一个.jar文件中,然后将该CoolFramework.jar放入你项目中的lib目录中。你现在需要放入lib/CoolFramework.jar类路径中。VM将在jar文件中查找该org/javaguy/coolframework零件,并找到你的类。

因此,类路径包含:

JAR文件,以及

包层次结构顶部的路径。

你如何设置类路径?

每个人似乎学习的第一种方法是使用环境变量。在UNIX机器上,你可以说以下内容:

export CLASSPATH=/home/myaccount/myproject/lib/CoolFramework.jar:/home/myaccount/myproject/output/

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

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

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

这是第三种方法的变体,通常使用.sh或.bat文件来完成,该文件计算类路径并将其通过-cp参数传递给Java 。

以上所有情况都有一个“陷阱”。在大多数系统(Linux,Mac OS,UNIX等)上,冒号(’:’)是类路径分隔符。在windowsm中,分隔符为分号(’;’)

那么最好的方法是什么?

通过环境变量在全局范围内设置内容是不好的,通常是出于与全局变量不好的原因相同的原因。你更改了CLASSPATH环境变量,以便一个程序可以工作,并且最终破坏了另一个程序。

-cp是解决方法。我通常会确保我的CLASSPATH环境变量尽可能在开发时在其中为空字符串,以便避免出现全局类路径问题(尽管全局类路径为空时某些工具并不满意-我知道有两个常见的百万美元许可的J2EE和Java服务器在其命令行工具中存在此类问题)。

2020-02-27