如何在命令行中为多个包设置类路径?

时间:2017-02-10 16:12:26

标签: java package classpath

我试图让一个java程序导入2个包但不知道如何在一个命令行中为多个包设置类路径。

2 个答案:

答案 0 :(得分:0)

致电java -cp <CLASSPATH> <MainClass>。请阅读PATH and CLASSPATH以根据您的操作系统找到CLASSPATH的正确语法。

答案 1 :(得分:0)

您可能希望阅读Oracle tech note on setting the classpath,但一般的想法是您有一个类路径变量/命令行参数,该参数由使用您的平台的标准路径分隔符分隔的多个路径组成 - 在Windows上通常是“;”在Unix上:“”(我通常会说,如果你在Windows上使用bash通过cygwin或类似的方法,你将使用unix分隔符。)

无论如何,类路径由包含类文件,特定jar文件的目录的路径组成,或者(在最近的Java版本中)是一个匹配jar(但不是类)的通配符。

如果你在jar或目录中有类,它们必须是目录包格式,例如,下面的类应该在目录foo/bar/Baz.class中:

package foo.bar;

public class Baz {
    public static void main(final String[] args) {
    }
}

因此,给定一个Unix目录/home/user/project/classes(其中包含一个包含foo/bar的目录Baz.class,一个jar文件/home/user/project/lib/dependency.jar和一个当前工作目录{{1}我们有:

  • 使用绝对路径的类路径: /home/user/project

  • 使用相对路径/home/user/project/classes:/home/user/project/lib/dependency.jar的类路径。

可以使用classes:lib/dependency.jar-classpath命令行参数将其传递给java:

  • -cp
  • java -classpath classes:lib/dependency.jar foo.bar.Baz

或者,可以设置CLASSPATH环境变量(通常在命令行上设置它并且不太容易导致意外的副作用更明显)。在bash中,这可能是:

  • java -cp classes:lib/dependency.jar foo.bar.Baz
  • CLASSPATH=classes:lib/dependency.jar java foo.bar.Baz

请注意,在使用可执行jar(其清单中具有Main-Class属性的jar)时,还必须在清单中定义类路径,并忽略命令行类路径(请参阅java -jar documentation )。