Kotlin 库的公共 API 检查

End*_*eit 0 gradle kotlin gradle-plugin

我现在正在编写一个小型 Kotlin 库,想知道是否有一种方法可以验证哪些类和函数是公开公开的。

我基本上想确保该库不会公开任何不属于公共 API 一部分的实现细节。

到目前为止,我将所有内容表示为internal库用户不应该能够访问给定的类/函数。这种方法的问题是我可能会忘记将某些内容声明为internal,从而向用户公开某些内容。

当我非故意公开类/方法时,我希望在构建时收到警告/错误。

任何有关如何实现这一目标或最佳实践的提示都将受到高度赞赏!

Ego*_*gor 6

Kotlin 1.4-M2 引入了显式 API 模式,这感觉就像您正在寻找的那样。public显式 API 模式要求您为所有公共 API添加可见性修饰符并显式指定返回类型。您可以配置 Gradle 插件来警告您有关显式 API 模式违规的信息,甚至使构建失败。

此功能自Kotlin 1.4起可用。

此功能仅在 Kotlin 1.4 中可用,目前处于 RC 阶段,但您可以使用 1.4 版本的 Kotlin Gradle 插件和 1.3.x 版本的 stdlib,既受益于新的 Gradle 插件功能,又确保您的库不依赖于不稳定的第三方代码。

Kotlin DSL 示例 ( build.gradle.kts):

kotlin {   
   explicitApi() // for strict mode
   // or
   explicitApiWarning() // for warning mode
}
Run Code Online (Sandbox Code Playgroud)

Groovy DSL ( ) 的示例build.gradle

kotlin {   
   explicitApi = 'strict'
   // or
   explicitApi = 'warning'
}
Run Code Online (Sandbox Code Playgroud)