java - 什么是类路径以及如何设置它?

标签 java classpath apache-velocity

我刚刚读到这一行:

The first thing the format() method does is load a Velocity template from the classpath named output.vm

请解释一下在此上下文中类路径的含义,以及我应该如何设置类路径。

最佳答案

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

import org.javaguy.coolframework.MyClass;

或者有时您可以通过说“批量导入”内容:

import org.javaguy.coolframework.*;

所以稍后在你的程序中当你说:

MyClass mine = new MyClass();

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

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

在讨论如何设置类路径之前,我们先讨论一下 .class 文件、包和 .jar 文件。

首先,我们假设 MyClass 是您作为项目的一部分构建的,并且它位于项目中名为 output 的目录中。 .class 文件将位于 output/org/javaguy/coolframework/MyClass.class (以及该包中的所有其他文件)。为了访问该文件,您的路径只需要包含文件夹“output”,而不是整个包结构,因为您的导入语句向虚拟机提供了所有这些信息。

现在假设您将 CoolFramework 捆绑到一个 .jar 文件中,并将该 CoolFramework.jar 放入项目的 lib 目录中。您现在需要将 lib/CoolFramework.jar 放入类路径中。虚拟机将在 jar 文件中查找 org/javaguy/coolframework 部分,并找到您的类。

因此,类路径包含:

  • 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

第三种方法是第三种方法,通常使用 .sh.bat 文件计算类路径并通过 -cp 参数将其传递给 Java。

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

那么最好的方法是什么?

通过环境变量全局设置东西是不好的,通常与全局变量不好的原因相同。您更改了 CLASSPATH 环境变量,以便一个程序可以运行,但最终会破坏另一个程序。

-cp 是正确的选择。我通常会确保我的 CLASSPATH 环境变量是一个空字符串,只要有可能,我就可以在其中进行开发,这样我就可以避免全局类路径问题(尽管有些工具在全局类路径为空时并不高兴 - 我知道有两个常见的、值(value)数千美元的 J2EE 和 Java 服务器的命令行工具存在此类问题)。

关于java - 什么是类路径以及如何设置它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30956356/

相关文章:

java - 当我执行 Files.write 时,Wildfly 正在使用文件

Java执行器服务连接池

java - 为什么 TestNG 看到我的包而不是我的类?

java - 什么是类路径以及如何设置它?

java - 在简单的 Velocity 报告中实现递归

java - 将相同的操作监听器添加到 JComboBox 和 JButton 是否合法

java - 当 Java 写入 Windows Server 2016 时文件上次修改不更新

java - 确定 Matlab 加载的 java 类的位置

java - 如何在 LINUX 上设置环境变量 CLASSPATH 和 NoClassDefFoundError

java - Polarion ALM SDK API getWorkItem()