什么是类路径?

问题描述:

我只是读这条线:什么是类路径?

的格式()方法做的第一件事是加载名为为output.vm

而且classpath中Velocity模板我无法弄清楚什么在这种情况下是由类路径指定的。

+21

这整齐地说明[掌握Java类路径] (http://kevinboone.net/classpath.html)肯定为任何患有classpath-phobia的患者提供医生触摸。实践给出的例子会清除所有相关的混淆。 – KNU 2014-11-20 12:19:04

当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(以及该包中的所有其他文件)。为了访问该文件,您的路径只需包含文件夹“输出”,而不是整个包结构,因为您的导入语句将所有信息提供给虚拟机。

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

所以,类路径包含:

  • 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 

在这第三条道路变种经常与计算classpath中.SH或.bat文件完成,通过-cp参数将它传递给Java。

那么最好的办法是什么?

通过环境变量设置全局变量是不好的,通常是因为全局变量不好的原因。您更改CLASSPATH环境变量以便一个程序可以正常工作,并最终打破另一个程序。

-cp是要走的路。我通常确保我的CLASSPATH环境变量是一个空字符串,在任何可能的情况下我都会进行开发,这样我就可以避免全局类路径问题(当全局类路径为空时,某些工具并不开心 - 我知道两个常见的,美元许可的J2EE和Java服务器与他们的命令行工具有这种问题)。

+4

关于[什么是Java中的PATH和CLASSPATH - Path vs ClassPath]的另一个很好解释的博客(http://java67.blogspot.in/2012/08/what-is-path-and-classpath-in-java-difference。 html) – KNU 2014-11-20 08:50:03

+2

令人难以置信的解释! – 2016-03-11 08:20:17

+0

在Python中有一个名为Lib的文件夹,您可以随时使用简单的导入语句来存储任何模块以供使用。这与将CLASSPATH环境变量设置为第三方Java包的目录不同吗?即使它是全球性的,除了添加更多的包之外,也不需要改变变量。 – 2016-06-22 08:36:31

此上下文中的类路径正是它在一般上下文中的含义:虚拟机知道它可以找到要加载的类和资源(例如output.vm)。

我知道Velocity希望能够在“无包”的任何位置找到名为output.vm的文件。这可以是JAR,常规文件夹,...应用程序类路径中任何位置的根。

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

在这种情况下,format()方法从此路径加载模板文件。

将其视为Java对PATH环境变量的回答 - 操作系统在PATH上搜索EXE,Java会在类路径中搜索类和包。

也像斯芬克斯特式的问题一样。

classpath和path是环境变量。通常,您必须将jdk/bin放在路径中,以便您可以在任何地方使用java编译器,classpath是.class文件的路径。类路径的默认路径是句点(。),表示当前目录。但是当你使用包装。你要么指定.class文件的完整路径,要么将类文件路径放在类路径中,这样可以节省很多工作量!

类路径是系统的环境变量。此变量的设置用于为java编译器提供任何包层次结构的根。

CLASSPATH是Java编译器和运行时找到Java程序中使用的Java包所需的环境变量(即可用于所有进程的操作系统的全局变量)。 (为什么不调用PACKAGEPATH?)这与另一个环境变量PATH类似,CMD shell使用它来查找可执行程序。

CLASSPATH can be set permanently in the environment: In Windows, choose control panel ⇒ System ⇒ Advanced ⇒ Environment Variables ⇒ choose "System Variables" (for all the users) or "User Variables" (only the currently login user) ⇒ choose "Edit" (if CLASSPATH already exists) or "New" ⇒ Enter "CLASSPATH" as the variable name ⇒ Enter the required directories and JAR files (separated by semicolons) as the value (e.g., ".;c:\javaproject\classes;d:\tomcat\lib\servlet-api.jar"). Take note that you need to include the current working directory (denoted by '.') in the CLASSPATH. 

To check the current setting of the CLASSPATH, issue the following command: 

> SET CLASSPATH 

CLASSPATH can be set temporarily for that particular CMD shell session by issuing the following command: 

> SET CLASSPATH=.;c:\javaproject\classes;d:\tomcat\lib\servlet-api.jar 

Instead of using the CLASSPATH environment variable, you can also use the command-line option -classpath or -cp of the javac and java commands, for example, 

> java –classpath c:\javaproject\classes com.abc.project1.subproject2.MyClass3 

设置CLASSPATH系统变量

要显示当前CLASSPATH变量,使用Windows和UNIX(Bourne shell)中这些命令:

CLASSPATH可以以下列方式之一进行设置: 在Windows中:C:\> set CLASSPATH 在UNIX:% echo $CLASSPATH

要删除CLASSPATH变量的当前内容,使用以下命令: 在Windows中:C:\> set CLASSPATH= 在UNIX:% unset CLASSPATH; export CLASSPATH

要设置CLASSPATH变量,使用这些命令(例如): 在Windows中:C:\> set CLASSPATH=C:\users\george\java\classes 在UNIX:% CLASSPATH=/home/george/java/classes; export CLASSPATH

+1

尽管这些命令对于处理环境变量可能很有用,但这并不能回答问题 – Hulk 2017-01-13 11:43:08