Gradle打包Kotlin项目为JAR时出现module-info.class重复报错如何解决?
问题原因
- 你当前的
jar任务配置是将所有编译依赖的内容全部解压后打入同一个Jar包,也就是常说的Fat Jar/可执行胖包配置。 - 项目依赖中存在多个包含Java 9模块描述文件
module-info.class的组件,这类文件统一存放在META-INF/versions/9/路径下,打包时多个同名文件产生冲突。 - Gradle 7.0及以上版本对重复文件的默认处理规则是抛出异常终止构建,不会默认覆盖或忽略重复文件,因此直接触发报错。
- 你提供的项目存放路径和该报错没有关联,不需要调整路径。
修复方案
在你现有的tasks.jar配置块中添加重复文件处理规则即可,修改后的配置如下:
tasks.jar { manifest { attributes["Main-Class"] = "MainKt" } // 新增重复文件处理策略 duplicatesStrategy = DuplicatesStrategy.EXCLUDE configurations["compileClasspath"].forEach { file: File -> from(zipTree(file.absoluteFile)) } }
- 上述配置指定的
DuplicatesStrategy.EXCLUDE会自动跳过重复的文件,不会影响普通Kotlin应用的正常运行。如果有特殊需求,也可以根据场景换成DuplicatesStrategy.FIRST(保留第一个遇到的文件)或DuplicatesStrategy.LAST(保留最后一个遇到的文件)。
内容的提问来源于stack exchange,提问作者WISHY
相关产品推荐
相关产品推荐

