未使用的MANIFEST.MF类路径

时间:2017-10-05 04:40:39

标签: java jar classpath classloader manifest

如果某个jar的清单Class-Path条目在该位置不存在,但是可以通过其他方式(例如,在应用程序服务器的lib文件夹中)可用,那么会发生什么?

未解决的Class-Path条目会导致任何错误吗?

1 个答案:

答案 0 :(得分:1)

JVM加载&按以下顺序搜索课程:

  1. 引导类 - 构成Java平台的类,包括rt.jar中的类和其他几个重要的jar文件。
  2. 扩展类 - 使用Java扩展机制的类。它们捆绑为.jar文件,位于扩展目录内,通常是$ JAVA_HOME / lib / ext目录。
  3. 用户类 - 开发人员定义的类。这些类的位置在命令行上使用-classpath选项或使用CLASSPATH环境变量。
  4. 如果JAR类路径指向已包含的JAR文件(例如,扩展名或类路径中前面列出的JAR文件),则不会再次搜索该JAR文件。 (此优化可提高效率并防止循环搜索。)此类JAR文件在类路径中较早出现的位置进行搜索。

    为了验证这一点,我也做了以下测试 1.创建包含Util类的lib(jar)“classpath-test”。 2.创建另一个lib(jar),即wrapper-lib,它使用classpath-test的Util类。 3.在wrapper-lib的MANIFEST.MF中,在条目下面添加。

    Class-Path: lib/classpath-test.jar
    
    1. 在lib dir下复制classpath-test.jar并在命令

      下运行

      java -jar wrapper-lib.jar

    2. 以上命令冉冉。删除lib / classpath-test.jar后执行相同的命令,但失败了。

      1. 另一个测试,从lib&删除了classpath-test.jar复制到JAVA_HOME / lib / ext并运行

        java -jar wrapper-lib.jar

      2. 有效。