升级Build Tools 27.0.3后项目编译失败,报DuplicateRelativeFileException错误
排查与解决思路
嘿,这个问题我之前碰到过类似的,升级Build Tools到27.x版本后,Android的文件合并规则确实变严格了——之前能容忍的重复文件现在会直接抛出异常。你找不到project.clj很正常,因为它不是你自己编写的文件,而是第三方依赖库带进来的:多个依赖包里都包含了这个Clojure项目的配置文件,现在合并时触发了冲突。给你几个实用的排查和解决步骤:
第一步:定位哪个依赖包含了
project.clj
你可以通过Gradle命令扫描所有依赖,找到冲突源头:- Mac/Linux环境在项目根目录执行:
./gradlew app:dependencies --configuration compileClasspath - Windows环境则执行:
gradlew.bat app:dependencies --configuration compileClasspath
或者用更精准的搜索命令,直接找出包含该文件的依赖:
./gradlew app:find -Ppattern=project.clj执行后会列出所有包含
project.clj的依赖模块。- Mac/Linux环境在项目根目录执行:
第二步:解决重复文件冲突
找到源头后,有两种常见的解决方式:- 全局排除重复文件:在app模块的
build.gradle中添加打包规则,直接排除所有project.clj文件(这个文件对Android项目没有实际作用):android { packagingOptions { exclude 'project.clj' } } - 精准排除特定依赖中的文件:如果某个依赖是不必要的,直接移除它;如果必须保留该依赖,可以针对性排除其中的
project.clj:implementation('com.example:some-library:1.0.0') { exclude fileTree(dir: 'META-INF', includes: ['project.clj']) }
- 全局排除重复文件:在app模块的
第三步:彻底清理缓存(进阶验证)
如果之前的清理操作没用,可以试试更彻底的方式:- 手动删除项目根目录下的
build文件夹,以及用户目录下的.gradle/caches文件夹 - 然后执行
./gradlew clean build --info,查看编译日志中关于project.clj的输出,进一步确认冲突来源
- 手动删除项目根目录下的
内容的提问来源于stack exchange,提问作者Pablo
相关产品推荐
相关产品推荐

