我刚读这行:
format()方法的第一件事是从名为output.vm的类路径加载Velocity模板
在这种情况下,我无法弄清楚classpath的含义。
答案 0 :(得分:456)
使用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
(以及该包中的每个其他文件)。为了获取该文件,您的路径只需要包含文件夹'output',而不是整个包结构,因为您的import语句将所有信息提供给VM。
现在让我们假设您将CoolFramework捆绑到.jar文件中,并将CoolFramework.jar放入项目的lib目录中。您现在需要将lib/CoolFramework.jar
放入类路径中。 VM将查看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。
那么最好的方法是什么?
通过环境变量全局设置内容很糟糕,通常是出于全局变量不好的相同原因。您更改了CLASSPATH环境变量,以便一个程序正常工作,并最终破坏另一个程序。
-cp是要走的路。我通常确保我的CLASSPATH环境变量是一个空字符串,我尽可能地开发它,以便我避免全局类路径问题(当全局类路径为空时,一些工具不高兴 - 我知道两个常见的,千兆美元许可的J2EE和Java服务器在他们的命令行工具中存在这种问题。)
答案 1 :(得分:53)
将其视为Java对PATH环境变量的回答 - 操作系统在PATH上搜索EXE,Java在类路径上搜索类和包。
也像泉水般的问题一样。
答案 2 :(得分:10)
类路径是Java虚拟机在Java程序中查找用户定义的类,包和资源的路径。
在此上下文中,format()
方法从此路径加载模板文件。
答案 3 :(得分:5)
此上下文中的类路径正是它在一般上下文中的类别:VM知道它可以在任何地方找到要加载的类,以及资源(例如,在您的情况下为output.vm)。
我知道Velocity希望在“无包装”中找到名为output.vm的文件。这可以是JAR,常规文件夹,...应用程序类路径中任何位置的根。
答案 4 :(得分:2)
设置CLASSPATH系统变量
要显示当前的CLASSPATH变量,请在Windows和UNIX(Bourne shell)中使用以下命令:
在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
答案 5 :(得分:1)
Classpath是系统的环境变量。此变量的设置用于为java编译器提供任何包层次结构的根。
答案 6 :(得分:0)
CLASSPATH是Java编译器和运行时定位Java程序中使用的Java包所需的环境变量(即,所有进程可用的操作系统的全局变量)。 (为什么不调用PACKAGEPATH?)这类似于另一个环境变量PATH,CMD shell使用它来查找可执行程序。
可以通过以下方式之一设置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 (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
答案 7 :(得分:0)
可以直接调用类的静态成员,而无需创建对象实例。 由于main方法是静态的,因此Java虚拟机可以在不创建包含main方法的类的任何实例的情况下调用它,
答案 8 :(得分:0)
Environment variable
是一个全局系统变量,可由操作系统(OS)下运行的所有进程访问。
classpath
是Java虚拟机使用的environment variable
,用于在.class
加载类期间在Java中定位或查找类文件(ClassLoader
)。
Java编译器(javac
),Java运行时(java
)和其他Java工具按以下顺序搜索程序中使用的类:
用户类别搜索路径(简称classpath
):按以下顺序确定:
a。默认为current working directory (.)
。
b。 classpath
environment variable
中的条目将覆盖默认条目。
c。 -cp
(或-classpath
)命令行选项中的条目,该选项将覆盖classpath
环境变量。
-jar
,将覆盖以上所有内容。 classpath
环境变量可以包括目录(包含许多类文件)和JAR文件(类文件的单文件存档)。如果未设置classpath
,则默认为current directory
。如果设置了classpath
,则必须包含current working directory (.)
。否则,将不会搜索当前目录。
您可以通过在运行Java程序时提供选项classpath
或environment variable
来覆盖由-cp
定义的Java -classpath
,这是拥有不同{{ 1}},用于在同一Unix或Windows计算机上运行的不同Java应用程序。
classpath
分隔符是分号java -cp "<path/1><separator><path/2>" <path.to.your.MainClass>
-Windows,冒号;
-Linux
例如MacOS的命令
:
答案 9 :(得分:0)
对于linux用户,要总结并添加其他人在这里所说的内容,您应该了解以下内容:
$ CLASSPATH是Java用来浏览多个目录以查找脚本所需的所有不同类的方法(除非您另外使用-cp覆盖明确地告诉了它)。使用-cp要求您手动跟踪所有目录,并在每次运行程序时复制粘贴该行(不建议使用IMO)。
冒号(“:”)字符分隔不同的目录。只有一个$ CLASSPATH,并且其中包含所有目录。因此,当您运行“ export CLASSPATH = ....”时,要包括当前值“ $ CLASSPATH”以便附加到该值。例如:
export CLASSPATH=.
export CLASSPATH=$CLASSPATH:/usr/share/java/mysql-connector-java-5.1.12.jar
在上面的第一行中,您仅以简单的“点”开始CLASSPATH,这是当前工作目录的路径。这样,每当您运行Java时,它将在当前工作目录(您所在的目录)中查找类。在上面的第二行中,$ CLASSPATH获取您先前输入的值(。),并将路径附加到mysql目录。现在,java将查找驱动程序和类。
echo $CLASSPATH
非常方便,它返回的内容应类似于所有目录和.jar文件的冒号分隔列表,您希望Java查找所需的类。
Tomcat不使用CLASSPATH。在此处了解如何处理:https://tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html
答案 10 :(得分:-2)
类路径和路径是环境变量。通常,您必须将jdk / bin放到路径中,以便您可以在任何地方使用java编译器,classpath是.class文件的路径。 classpath的默认路径为句点(。),表示当前目录。但是当你使用包裹时。你要么指定.class文件的完整路径,要么将.class文件路径放在类路径中,这将节省大量的工作!