是否有一种方法将所有jar文件包含在类路径的目录中?

我正在尝试java -classpath lib/*.jar:。program,它不能找到在这些罐子里的类文件。我是否需要将每个jar文件分别添加到类路径中?


当前回答

我在Ubuntu 10.04上使用java-sun 1.6.0_24的解决方案,所有的jar都在“lib”目录下:

java -cp .:lib/* my.main.Class

如果失败,下面的命令应该起作用(打印出所有*。lib目录中的jar到类路径参数)

java -cp $(for i in lib/*.jar ; do echo -n $i: ; done). my.main.Class

其他回答

您需要分别添加它们。或者,如果确实需要指定一个目录,可以将所有内容解jar到一个目录中,并将其添加到类路径中。但是,我不推荐这种方法,因为您可能会在类路径版本控制和不可管理性方面出现奇怪的问题。

把jar文件看作目录结构的根。是的,您需要分别添加它们。

如果您确实需要动态指定所有的.jar文件,您可以使用shell脚本或Apache Ant。有一个名为commons Launcher的公共项目,基本上可以让你将启动脚本指定为蚂蚁构建文件(如果你明白我的意思)。

然后,你可以指定如下内容:

<path id="base.class.path">
    <pathelement path="${resources.dir}"/>
    <fileset dir="${extensions.dir}" includes="*.jar" />
    <fileset dir="${lib.dir}" includes="*.jar"/>
</path>

在启动构建文件中,该文件将使用正确的类路径启动应用程序。

对我来说,这适用于窗户。

java -cp "/lib/*;" sample

linux

java -cp "/lib/*:" sample

我使用的是Java 6

macOS,当前文件夹

Java 13在macOS Mojave…

如果所有的.jar文件都在同一个文件夹中,使用cd将其设置为当前工作目录。与pwd核实。

对于-classpath,首先必须列出应用程序的JAR文件。使用冒号:作为分隔符,附加星号*以获得同一文件夹中的所有其他JAR文件。最后,将类的完整包名与main方法一起传递。

例如,对于一个名为my_app.jar的JAR文件中的一个应用程序,在一个名为com的包中一个名为app的类中有一个主方法。例如,在同一个文件夹中放置一些需要的罐子:

java -classpath my_app.jar:* com.example.App