我正在处理一个构建问题:
A failure occurred while executing com.android.build.gradle.internal.tasks.MergeJavaResWorkAction
> 2 files found with path 'META-INF/annotation-experimental_release.kotlin_module'
它可以通过在app目录中添加这些行到build.gradle来修复,就像其他门票上建议的那样。
packagingOptions {
exclude("META-INF/*kotlin_module")
}
排除META-INF/是否安全?它会引起什么问题吗我没有在我的代码中使用Kotlin,那是来自其他SDK的。
2条答案
按热度按时间relj7zay1#
有一些令人困惑的信息...
TLDR如果jar文件仅供自己使用,且您不使用反射,则可以排除文件。
如下所述:https://blog.jetbrains.com/kotlin/2015/09/kotlin-m13-is-out/
顶层声明的.class文件新布局
几个月前,我们宣布了这一变化,现在已经完成了:
要使此更改生效,
我们不得不引入一个新的资源文件,它是针对Kotlin二进制文件编译Kotlin代码所必需的。它的名字是
META-INF/<module_name>.kotlin_module
。确保这些.kotlin_module
文件没有被打包过程剥离。另外,请确保项目中的模块名称不冲突
正如这里进一步评论的那样:https://youtrack.jetbrains.com/issue/KT-9770(这些文件仅用于反射和构建过程)
kotlin.reflect.*
的任何API)这些文件的更多澄清原因:
对于某些Kotlin类,我们不能将元数据存储在注解中,因为该类实际上并不存在(Int、List等),因此我们将这些信息存储在单独的资源中。这就是
.kotlin_builtins
文件的用途。对于顶级声明,我们需要知道包由哪些文件组成,这就是.kotlin_module
文件的作用。oyxsuwqo2#
如果您发布了一个库并排除了
META-INF/*kotlin_module
,这可能是危险的。在我的例子中,当试图从这个库调用一些全局Kotlin函数时,它导致了未解决的引用错误。我的建议是避免排除这一点。