报错关键词
Cause: duplicate entry: module-info.class
或
java.util.zip.ZipException: duplicate entry
情况说明
由于工作需要,需要进行jwt相关签名加密,从java项目中摘取了几个lib,创建了“签名 module”,以module形式引入,代码可以正常运行。
但是项目build 成了 aar,之后引入app就报错如下。
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:compileDebugJavaWithJavac'.
> Could not resolve all files for configuration ':app:debugCompileClassp
ath'.
> Failed to transform shanghai_sdk_1.1_debug.aar to match attributes
{artifactType=android-classes-jar, org.gradle.usage=java-api}.
> Execution failed for AarToClassTransform: C:\Users\Administrator\.
gradle\caches\transforms-2\files-2.1\360aab2cc5c51e0c1481c5e6da41
c114\jetified-shanghai_sdk_1.1_debug.aar.
> duplicate entry: META-INF/versions/9/module-info.class
* Try:
解决经过
- 刷新 clean 、invalidate 无效
- 各种翻墙,搜出来效果,包括修改gradle:修改aar引用方式, 声明java版本,跳过报错task等的修改等 ,逻辑正常方法,均做了测试,无效。
- 搜索过程中有人提到了,代码错误,最开始认为module形式引入正常,就没在意,但是最终排除掉其他可能性 ,只能抱着试试看想法来:
由于引入java 的jar是从maven本地库里面直接考出来的,中间也确实处理了一些“水土不服”的问题。于是开始试验,建了一个空项目,只引入几个jar包,再构建成aar,导入果然报错,至此问题定位明确。 - 缩小了定位范围后,搜索问题就清晰了,定位到这个文件是java1.9的新特性,我不能因为一个jar包而更换java环境,而且查到删除对应文件不影响使用,就备份了原始文件开始测试。
最终解决方式
https://blog.csdn.net/haohaounique/article/details/94780353
由于我的问题是 本地环境是java1.8,而引入的jar包包含1.9的特性,所以使用 压缩工具,打开jar包,并且删除jar包中的, module-info.class清单文件,然后再编译,正常通过。