Java 未使用的MANIFEST.MF类路径

Java 未使用的MANIFEST.MF类路径,java,jar,classpath,classloader,manifest,Java,Jar,Classpath,Classloader,Manifest,如果某个jar的清单类路径条目不存在于该位置,但通过另一种方式(例如,在ApplicationServer的lib文件夹中)可用,会发生什么情况 未解析的类路径条目是否会导致任何错误?JVM按以下顺序加载和搜索类: 引导类——构成Java平台的类,包括rt.jar中的类和其他几个重要的jar文件。 扩展类—使用Java扩展机制的类。这些文件打包为.jar文件,位于extensions目录中。通常为$JAVA_HOME/lib/ext目录。 用户类-由开发人员定义的类。使用命令行上的-classp

如果某个jar的清单类路径条目不存在于该位置,但通过另一种方式(例如,在ApplicationServer的lib文件夹中)可用,会发生什么情况


未解析的类路径条目是否会导致任何错误?

JVM按以下顺序加载和搜索类:

引导类——构成Java平台的类,包括rt.jar中的类和其他几个重要的jar文件。 扩展类—使用Java扩展机制的类。这些文件打包为.jar文件,位于extensions目录中。通常为$JAVA_HOME/lib/ext目录。 用户类-由开发人员定义的类。使用命令行上的-classpath选项或使用classpath环境变量来定位这些类。 如果JAR类路径指向一个已经包含的JAR文件,例如扩展名,或者前面在类路径中列出的JAR文件,那么将不会再次搜索该JAR文件。此优化可提高效率并防止循环搜索。这样的JAR文件在类路径的前面出现的位置进行搜索

为了验证这一点,我还做了以下测试 1.创建了包含Util类的libjar类路径测试。 2.创建了另一个libjar,即使用类路径测试的Util类的包装库。 3.在包装库的MANIFEST.MF中,添加到下面的条目中

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

java-jar包装器-lib.jar

上面的命令运行良好。删除lib/classpath-test.jar后运行了相同的命令,但失败

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

java-jar包装器-lib.jar

成功了