如何在命令行中设置多个包的类路径?
您可能想要阅读Oracle tech note on setting the classpath,但总的想法是,您有一个单独的类路径变量/命令行参数,它由多个路径组成,这些路径使用您的平台的标准路径分隔符分隔 - 在Windows上,这通常是“ ;”和Unix上的“:”(我说通常是因为如果你通过cygwin或类似的Windows使用bash,你将使用unix分隔符)。无论如何,类路径都是由包含类文件的目录,特定的jar文件或(在最近的java版本中)匹配罐子(但不包括类)的通配符组成的路径组成的。
如果你有一个罐子或目录中的类,它们必须在目录的封装格式,如下面的类预计将在一个目录foo/bar/Baz.class
:
package foo.bar;
public class Baz {
public static void main(final String[] args) {
}
}
所以,对于一个UNIX目录/home/user/project/classes
(其中包含目录包含Baz.class
,一个jar文件/home/user/project/lib/dependency.jar
,和/home/user/project
当前工作目录foo/bar
我们:
类使用路径绝对路径:
/home/user/project/classes:/home/user/project/lib/dependency.jar
。使用相对路径
classes:lib/dependency.jar
类路径。
人们可以使用任一-classpath
或-cp
命令行参数传递这个到Java:
java -classpath classes:lib/dependency.jar foo.bar.Baz
java -cp classes:lib/dependency.jar foo.bar.Baz
或者,CLASSPATH环境变量可以设置(通常将它设置在命令行上更为明显,并且不太可能引起意外的副作用)。在bash这可能是:
CLASSPATH=classes:lib/dependency.jar java foo.bar.Baz
export CLASSPATH=classes:lib/dependency.jar; java foo.bar.Baz
注意,使用一个可执行的JAR时(一个与主级在其清单属性)是必要的类路径中还在清单中被定义和命令行类路径被忽略(参见java -jar documentation)。