在Java类路径中的所有目录中包含一个目录

有没有办法在类路径中的目录中包含所有的jar文件?

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


使用Java 6或更高版本,类路径选项支持通配符。 请注意以下几点:

  • 使用直引号( "
  • 使用* ,而不是*.jar
  • 视窗

    java -cp "Test.jar;lib/*" my.package.MainClass

    Unix的

    java -cp "Test.jar:lib/*" my.package.MainClass

    这与Windows类似,但使用:而不是; 。 如果不能使用通配符, bash允许使用以下语法(其中lib是包含所有Java归档文件的目录):

    java -cp $(echo lib/*.jar | tr ' ' ':')

    (请注意,使用类路径与-jar选项不兼容。另请参阅:使用命令提示符执行具有多个类路径库的jar文件)

    了解通配符

    从Classpath文档中:

    类路径条目可以包含基本名称通配符* ,这被认为等同于指定扩展名为.jar.JAR的目录中所有文件的列表。 例如,类路径条目foo/*指定名为foo的目录中的所有JAR文件。 一个仅包含*类路径条目展开为当前目录中所有jar文件的列表。

    包含*类路径条目与类文件不匹配。 要在单个目录foo中匹配类和JAR文件,请使用foo;foo/*foo/*;foo 。 选择的顺序确定是否在类和资源foo中之前在JAR文件加载foo ,或反之亦然。

    子目录不会被递归搜索。 例如, foo/*只在foo查找JAR文件,而不是在foo/barfoo/baz等中

    目录中的JAR文件在扩展类路径中列举的顺序未指定,并且可能因平台而异,甚至在同一台计算机上不同。 一个构造良好的应用程序不应该依赖于任何特定的顺序。 如果需要特定顺序,则可以在类路径中显式枚举JAR文件。

    在调用程序的主要方法之前,扩展通配符是在组装过程本身期间提前完成的,而不是延迟。 包含通配符的输入类路径的每个元素都被通过枚举指定目录中的JAR文件生成的(可能为空)元素序列替换。 例如,如果目录foo包含a.jarb.jarc.jar ,那么类路径foo/*将扩展到foo/a.jar;foo/b.jar;foo/c.jar和该字符串将是系统属性java.class.path的值。

    CLASSPATH环境变量与-classpath (或-cp )命令行选项的处理方式不同。 也就是说,通配符在所有这些情况下都很有用。 但是,类路径通配符在Class-Path jar-manifest头文件中不受尊重。


    在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
    

    分隔符是冒号而不是分号。


    我们通过部署包含清单Manifest.mf )文件的 jar文件myapp.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上启动。

    链接地址: http://www.djcxy.com/p/29657.html

    上一篇: Including all the jars in a directory within the Java classpath

    下一篇: Is it best to Mavenize your project jar files or put them in WEB