我有一个关于类加载器行为的有趣问题。
问题一: classloader加载jar的顺序是什么?
给出了以下 jars 和包含的类:
a.jar
+-com/scheffield/foo/A.class
b.jar
+-com/scheffield/foo/B.class
将加载哪个类?
问题二: classpath中文件的路径和名称是唯一的吗?
给出了以下 jars 和包含的类(真实示例):
spring-beans-3.0.3.RELEASE.jar
+-META-INF/spring.schemas
spring-aop-3.0.3.RELEASE.jar
+-META-INF/spring.schemas
我可以告诉你的是,这两个文件都是由 Spring 加载的,否则会发生异常(参见这篇文章)。
我为什么这么问:
我做了一个所谓的大罐子(gradle 的食谱条目)。那是一个 jar,其中应用程序类和所有其他依赖项解压缩并打包在大 jar 中。而且我不确定如何处理重复的文件。