当前位置: 首页 > 面试题库 >

Java 什么是类路径,该如何设置?

澹台新知
2023-03-14
问题内容

我只是在读这行:

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

请解释在这种情况下类路径的含义,以及如何设置类路径。


问题答案:

使用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服务器在其命令行工具中存在此类问题)。



 类似资料:
  • 我正在读这一行: format()方法做的第一件事是从名为output的类路径加载Velocity模板。虚拟机 请解释在这个上下文中类路径的含义,以及我应该如何设置类路径。

  • 问题内容: 我有很多jar文件要添加到我的类路径中,因此,每次编译Java文件时,都会得到如下命令: 我尝试使用: 然后: 但是根本没有添加jar:由于缺少jar,我得到了错误信息…谢谢 问题答案: 也许您想尝试使用Maven来构建您的应用程序?它真的很容易设置,并且消除了依赖管理的所有问题。 同样从Java 6开始,您可以在类路径中使用通配符: set CLASSPATH = my_libs \

  • 问题内容: 有人可以告诉我在NetBeans中在哪里以及如何设置类路径吗?我想添加一个.jar文件。 问题答案: 用鼠标右键单击你的项目。 选择Properties。 在左侧单击Libraries。 下Compile tab-单击Add Jar/Folder按钮。 要么 扩展你的项目。 右键单击Libraries。 选择Add Jar/Folder。

  • 问题内容: 想知道不指定classpath选项时默认的classpath是什么吗? 问题答案: 当前的工作目录()。 从Java™教程中:PATH和CLASSPATH: 类路径 的 默认值为“。” ,表示仅搜索当前目录。指定CLASSPATH变量或-cp命令行开关将覆盖此值。 这包括子目录吗? 不,在类路径中没有条目是“递归的”。您必须明确列出每个子目录(或jar)。但是,如果您有一个表示clas

  • 问题内容: 我正在尝试在Windows XP命令行上手动运行特定的JUnit测试,该命令行在类路径中具有异常大量的元素。我尝试了几种变体,例如: (其他变体是将类路径全部设置为一行,通过-classpath将类路径设置为java的参数”。)它总是归结于控制台,它会抛出该错误: 这是一个JUnit测试,测试了一个相当大的现有遗留项目,因此没有关于将目录结构重新安排为更合理的建议,这些类型的解决方案目

  • 问题内容: 好吧,我很困惑。我的SQL Server JAR在这里: 我的类路径已设置: 它是JDBC 4.0驱动程序,因此我不需要这样做,但是我尝试设置类名。 我仍然执行我的程序,但出现错误: 万一有问题,我正在运行Windows 8.1。我已经尝试过以管理员身份或不以管理员身份使用命令提示符。 Java信息: 有任何想法吗? SQL Server是SQL Server Express 2012