3

我创建了一个 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 文件规范,它也没有给我任何线索。

4

1 回答 1

2

maven-shade-plugin是通过AppendingTransformer完成的。

我对您正在使用的 gradle 插件文档的解释是这样做的:

shadowJar {
  append('META-INF/spring.factories')
}
于 2016-03-03T15:20:16.900 回答