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

Java 什么是类路径以及如何设置它?,java,classpath,apache-velocity,Java,Classpath,Apache Velocity,我刚才在读这句话: format()方法做的第一件事是从名为output.vm的类路径加载Velocity模板 请解释这个上下文中的类路径是什么意思,以及我应该如何设置类路径。这个上下文中的类路径正是一般上下文中的类路径:VM知道的任何地方都可以找到要加载的类以及资源(比如在您的例子中的output.VM) 我知道Velocity希望在“no package”中的任意位置找到一个名为output.vm的文件。这可以是一个JAR,普通文件夹。。。应用程序类路径中任何位置的根。类路径是Java虚拟机

我刚才在读这句话:

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


请解释这个上下文中的类路径是什么意思,以及我应该如何设置类路径。

这个上下文中的类路径正是一般上下文中的类路径:VM知道的任何地方都可以找到要加载的类以及资源(比如在您的例子中的output.VM)


我知道Velocity希望在“no package”中的任意位置找到一个名为output.vm的文件。这可以是一个JAR,普通文件夹。。。应用程序类路径中任何位置的根。

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


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

将其视为Java对path环境变量的回答-OSes在路径上搜索EXE,Java在类路径上搜索类和包。

使用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”,而不是整个包结构,因为您的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计算机上,您必须转到环境设置并添加或修改已有的值

第二种方法是在启动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
环境变量是一个空字符串,只要有可能,我都会在其中进行开发,以避免全局类路径问题(不过,当全局类路径为空时,有些工具并不满意——我知道有两个常见的、价值数千美元的、获得许可的J2EE和Java服务器的命令行工具存在此类问题).

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

类路径是一个环境变量(即操作系统的全局变量,可用于所有进程)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)中使用以下命令: 在Windows中:
C:\>设置类路径
在UNIX中:
%echo$CLASSPATH

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

要设置CLASSPATH变量,请使用以下命令(例如): 在Windows中:
C:\>set CLASSPATH=C:\users\george\java\classes

在UNIX中:
%CLASSPATH=/home/george/java/classes;export CLASSPATH

可以直接调用类的静态成员,而无需创建对象实例。
由于main方法是静态的,Java虚拟机可以调用它,而无需创建包含main方法的类的任何实例,main方法是程序的起点。

对于linux用户,要总结和补充其他人在这里所说的内容,您应该知道以下几点:

  • $CLASSPATH是Java用来在多个目录中查找脚本所需的所有不同类的工具(除非您使用
    export CLASSPATH=.
    export CLASSPATH=$CLASSPATH:/usr/share/java/mysql-connector-java-5.1.12.jar
    
    echo $CLASSPATH