是否有一种方法将所有jar文件包含在类路径的目录中?
我正在尝试java -classpath lib/*.jar:。program,它不能找到在这些罐子里的类文件。我是否需要将每个jar文件分别添加到类路径中?
是否有一种方法将所有jar文件包含在类路径的目录中?
我正在尝试java -classpath lib/*.jar:。program,它不能找到在这些罐子里的类文件。我是否需要将每个jar文件分别添加到类路径中?
当前回答
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
其他回答
你可以试试java -Djava.ext.dirs=jarDirectory http://docs.oracle.com/javase/6/docs/technotes/guides/extensions/spec.html
运行java时用于外部jar的目录
在Windows下,这是有效的:
java -cp "Test.jar;lib/*" my.package.MainClass
这是行不通的:
java -cp "Test.jar;lib/*.jar" my.package.MainClass
注意*.jar,因此*通配符应该单独使用。
在Linux操作系统下,如下所示:
java -cp "Test.jar:lib/*" my.package.MainClass
分隔符是冒号而不是分号。
对于windows,引号是必需的,并且;应作为分离器使用。例如:
java -cp "target\\*;target\\dependency\\*" my.package.Main
我们通过部署一个主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上启动。
您需要分别添加它们。或者,如果确实需要指定一个目录,可以将所有内容解jar到一个目录中,并将其添加到类路径中。但是,我不推荐这种方法,因为您可能会在类路径版本控制和不可管理性方面出现奇怪的问题。