这个编译异常经常会出现,一般请款下是因为某一个类或者support包重复导入多次引起,常规的解决办法,使用 " ./gradlew -q app:dependencies" 使用这个命令查看项目中的各个module所依赖的第三方工程,然后在你的APP module下找到你导入第三方依赖的位置,并使用exclude group "xxx.xxx.xxx" 操作就可以解决项目依赖重复导入的问题。
这里描述一个我这遇到的坑比较深的场景
前置条件
- 项目支持kotlin;
- 导入的第三方或自己开发的lib库内含有kotlin文件;
- 本地项目的 kotlin-stdlib-jkd7, kotlin-stdlib-jdk8 等lib库均包含,
如下图
编译后出现的错误:
Program type already present $$xx$ lambda
项目直接减错误指示到 kotlin文件中的lambda 表达式
接下来你可能会返回检查、重写、或者切换自己lambda 表达式的写法或者直接不使用lambda表达式,但是编译的错误依旧显示这个bug;
问题的根本原因:org.jetbrains.kotlin:kotlin-stdlib-jkd7,
org.jetbrains.kotlin:kotlin-stdlib-jkd8 这两个kotlin-stdlib 在项目中出现了版本不统一,
修复建议: kotlin-stdlib-jkd7,kotlin-stdlib-jkd8 这两个版本只保留一个版本, 且需要使用 exclude group 命令主动删除第三方包中导入的
kotlin-stdlib-jkd7(8),避免第三方主动带入了kotlin-std-lib库造成项目的kotlin-stdlib-jkd的版本不统一。
如果经过上述步骤还无法修复,可以删除工程下的build, app.build这两个文件目录进行再次编译
image.png
网友评论