什么是类path?
我正在读这一行:
format()方法的第一件事是从名为output.vm的类path中加载一个Velocity模板
在这种情况下,我无法弄清楚classpath是什么意思。
当用Java编程时,通过在源文件的顶部放置类似的东西,可以使其他类可用于您正在编写的类。
import org.javaguy.coolframework.MyClass;
或者有时候你“大量import”的东西说:
import org.javaguy.coolframework.*;
所以后来在你的程序中,当你说:
MyClass mine = new MyClass();
Java虚拟机将知道在哪里可以find你编译的类。
让虚拟机查看机器上的每个文件夹是不切实际的,所以你必须提供一个虚拟机看看的地方列表。 这是通过将文件夹和jar文件放在你的类path上来完成的。
在我们讨论如何设置类path之前,我们先来讨论.class文件,包和.jar文件。
首先,我们假设MyClass是作为项目的一部分构build的,它位于项目的一个名为output
的目录中。 .class文件将位于output/org/javaguy/coolframework/MyClass.class
(以及该包中的所有其他文件)。 为了得到这个文件,你的path只需要包含文件夹“输出”,而不是整个包结构,因为你的import语句提供了所有这些信息给虚拟机。
现在让我们假设你将CoolFramework捆绑到一个.jar文件中,然后将CoolFramework.jar放到项目的lib目录中。 您现在需要将lib/CoolFramework.jar
放入您的类path中。 VM将查看org/javaguy/coolframework
部件的jar文件,并find您的类。
所以,类path包含:
- JAR文件和
- 封装层次结构顶部的path。
你如何设置你的类path?
大家似乎学习的第一种方式是使用环境variables。 在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文件来完成,该文件计算类path并通过-cp参数将其传递给Java。
那么最好的办法是什么?
通过环境variables设置全局variables是不好的,通常出于全局variables不好的原因。 您更改CLASSPATH环境variables,以便一个程序工作,并最终打破另一个程序。
-cp是要走的路。 我通常会确保我的CLASSPATH环境variables是一个空string,在任何可能的情况下开发,这样我就可以避免全局类path问题(当全局类path为空时,某些工具并不开心 – 我知道两个常见的,美元许可的J2EE和Java服务器与他们的命令行工具有这种问题)。
把它看作Java对PATH环境variables的回答 – 操作系统searchPATH上的EXE,Javasearch类path上的类和包。
就像斯温斯汀式的问题一样。
类path是Java虚拟机在Java程序中查找用户定义的类,包和资源的path。
在这种情况下, format()
方法从这个path加载一个模板文件。
这个上下文中的类path正是它在一般上下文中的地方:虚拟机知道它可以find要加载的类以及资源(比如output.vm)。
我知道Velocity希望在“无包”的任何地方find一个名为output.vm的文件。 这可以是JAR,常规文件夹,…应用程序类path中任何位置的根。
类path是系统的环境variables。 这个variables的设置用来为java编译器提供任何包层次结构的根。
类path和path是环境variables。 通常,您必须将jdk / bin放在path中,以便您可以在任何地方使用java编译器,classpath是.class文件的path。 类path的默认path是句点(。),表示当前目录。 但是当你使用包裹。 你要么指定.class文件的完整path,要么将.class文件path放在classpath中,这样可以节省很多工作量!
CLASSPATH是Java编译器和运行时所需的用于定位Java程序中使用的Java包的环境variables(即操作系统的全局variables,可用于所有进程)。 (为什么不调用PACKAGEPATH?)这与另一个环境variablesPATH类似,CMDshell使用它来查找可执行程序。
CLASSPATH可以通过以下方式之一来设置:
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 (eg, ".;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系统variables
要显示当前的CLASSPATHvariables,请在Windows和UNIX(Bourne shell)中使用这些命令:在Windows中: C:\> set CLASSPATH
在UNIX中: % echo $CLASSPATH
要删除CLASSPATHvariables的当前内容,请使用以下命令:在Windows中: C:\> set CLASSPATH=
在UNIX中: % unset CLASSPATH; export CLASSPATH
% unset CLASSPATH; export CLASSPATH
要设置CLASSPATHvariables,请使用以下命令(例如):在Windows中: C:\> set CLASSPATH=C:\users\george\java\classes
在UNIX中: % CLASSPATH=/home/george/java/classes; export CLASSPATH
% CLASSPATH=/home/george/java/classes; export CLASSPATH