在使用Java 8的Windows上...
我最近开始支持将遗留Java代码(单个jar文件)部署到JDK扩展目录$JAVA_HOME/lib/ext
中的旧版应用程序。这是Java扩展类加载器使用的位置。这是加载应用程序代码的一种不寻常的方式,但是它可以工作。我将jar文件的扩展名从.jar
文件更改为.BAK
,以为该文件将被忽略。令我惊讶的是,这些类仍从重命名的文件加载。似乎扩展类加载器将加载$JAVA_HOME/lib/ext
中的所有文件,而不管文件扩展名,甚至没有扩展名的文件。这与应用程序类加载器不同,应用程序类加载器仅在扩展名为.jar
引用的文件夹中时才加载扩展名为.JAR
或-cp ".;./folder/*"
的文件。
为什么与扩展类加载器不一致?这是设计使然还是错误?我在这些博客上找不到任何Oracle文档。