我创建了一个 jar 文件,由多个 jar 创建(在这种情况下我使用了Gradle Shadow插件)。
原来,该文件包含重复的文件/META-INF
。其中大部分是license.txt
原始jar文件的多个,但其中一些是我感兴趣的Spring工厂。
在 Maven 或 Gradle 中使用各种类似 fatjar 的工具时,这种行为似乎很常见,而且看起来并没有以任何方式禁止。
我已经检查过是否java.lang.ClassLoader#getResources
会将这些条目作为相同 URL 的列表返回,例如:
jar:file:/C:/temp/myJar.jar!/META-INF/spring.factories
jar:file:/C:/temp/myJar.jar!/META-INF/spring.factories
因此,一旦我获得 URL,就无法以编程方式获取所有重复文件的内容。
Java可以以某种方式处理这样的重复文件吗?
或者,也许更一般地说,从规范的角度来看,有一个里面有重复文件的 jar 是一种有效且受支持的情况吗?我检查了Jar 文件规范,它也没有给我任何线索。