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

我正在尝试java -classpath lib/*.jar:。program,它不能找到在这些罐子里的类文件。我是否需要将每个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>

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

其他回答

我们通过部署一个主jar文件myapp.jar来解决这个问题,该文件包含一个清单(manifest .mf)文件,该文件指定了一个类路径和其他所需的jar,然后这些jar与它一起部署。在这种情况下,您只需要在运行代码时声明java -jar myapp.jar。

因此,如果你将主jar部署到某个目录中,然后将从属jar部署到该目录下的lib文件夹中,清单如下所示:

Manifest-Version: 1.0
Implementation-Title: myapp
Implementation-Version: 1.0.1
Class-Path: lib/dep1.jar lib/dep2.jar

注意:这是与平台无关的——我们可以使用相同的jar在UNIX服务器或Windows PC上启动。

对于windows,引号是必需的,并且;应作为分离器使用。例如:

java -cp "target\\*;target\\dependency\\*" my.package.Main

窗口:

 java -cp file.jar;dir/* my.app.ClassName

Linux:

 java -cp file.jar:dir/* my.app.ClassName

提醒: - Windows路径分隔符为; —Linux路径分隔符为: —在Windows操作系统中,如果cp参数不包含空格,“quotes”为可选参数

正确的:

java -classpath "lib/*:." my.package.Program

不正确的:

java -classpath "lib/a*.jar:." my.package.Program
java -classpath "lib/a*:."     my.package.Program
java -classpath "lib/*.jar:."  my.package.Program
java -classpath  lib/*:.       my.package.Program

如果使用Java 6,则可以在类路径中使用通配符。

现在可以在类路径定义中使用通配符:

javac -cp libs/* -verbose -encoding UTF-8 src/mypackage/*.java  -d build/classes

裁判:http://www.rekk.de/bloggy/2008/add-all-jars-in-a-directory-to-classpath-with-java-se-6-using-wildcards/