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

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


当前回答

我在一个文件夹里有多个罐子。下面的命令在JDK1.8中对我有用,可以包括文件夹中的所有jar。请注意,如果在类路径中有空格,请在引号中包含

窗户

“C:\My Jars\sdk\lib\*

运行:java -classpath "C:\My Jars\sdk\lib\*; C:\ programs" MyProgram

Linux

编译:javac -classpath "/home/guestuser/My Jars/sdk/lib/*" MyProgram.java

运行:java -classpath "/home/guestuser/My Jars/sdk/lib/*:/home/guestuser/programs" MyProgram

其他回答

我在一个文件夹里有多个罐子。下面的命令在JDK1.8中对我有用,可以包括文件夹中的所有jar。请注意,如果在类路径中有空格,请在引号中包含

窗户

“C:\My Jars\sdk\lib\*

运行:java -classpath "C:\My Jars\sdk\lib\*; C:\ programs" MyProgram

Linux

编译:javac -classpath "/home/guestuser/My Jars/sdk/lib/*" MyProgram.java

运行:java -classpath "/home/guestuser/My Jars/sdk/lib/*:/home/guestuser/programs" MyProgram

如果使用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/

我们通过部署一个主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上启动。

我在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

正确的:

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