在构建项目时遇到了这个众所周知的异常。
我的问题是:
我怎样才能找到Foo.class
的重复位置(在哪些 jar 、库中)是?
我过去曾经解决过这样的问题,通常原因是在不同版本的Android库中(支持,播放等......)。我的项目有10个模块,所以每次需要比较10个build.gradle
中的所有依赖.
特别是,现在是 javax/annotation/CheckForNull.class
.我卡住了,找不到任何重复的依赖项。
所以我只需要一个简单的方法来知道 - X 包含哪个库 Foo.class
并且另一个库 Y 包含 Foo.class
.是否可以?
最佳答案
将此添加到您的 build.gradle
task findDuplicates {
doLast {
def pathMap = [:]
def jars = configurations.runtime.asFileTree.matching {
include '*.jar'
}
jars.visit { FileVisitDetails fvd ->
FileTree classTree = zipTree(fvd.file).matching {
include '**/*.class'
}
classTree.visit { FileVisitDetails fvd2 ->
String path = fvd2.relativePath.pathString
List<String> jarList = pathMap[path]
if (!jarList) {
jarList = []
pathMap[path] = jarList
}
jarList << fvd.file.name
}
}
pathMap.each { path, jarList ->
if (jarList.size() > 1) {
println "Duplicate $path at $jarList"
}
}
}
}
然后调用
gradle findDuplicates
从命令行
关于android - java.util.zip.ZipException : duplicate entry Foo. 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41775653/