如何让Kotlin中的internal类对另一个跨项目模块可见?
跨项目共享Kotlin Internal类的解决方案
正确配置Kotlin友元模块参数
你之前尝试的-Xfriend-paths思路没问题,但路径不能指向源码目录,得关联到目标库的编译输出目录。具体配置分两步:- 定义internal类的库(比如叫
lib-core)无需额外友元配置,保证正常编译即可。 - 需要访问该类的关联库(比如叫
lib-partner),在Gradle里添加编译器参数:kotlin { compilerOptions { // 替换成lib-core的实际编译输出路径,多平台项目要指定target(如jvmMain) freeCompilerArgs.add("-Xfriend-paths=${project(":lib-core").buildDir}/classes/kotlin/main") } }
- 定义internal类的库(比如叫
确保项目依赖关系正确
关联库lib-partner必须先依赖定义internal类的lib-core,否则编译时找不到目标类文件,友元参数也无效:
dependencies { implementation(project(":lib-core")) }
修复IntelliJ识别问题
IDE可能不会自动同步友元配置,试试这两步:- 点击Gradle面板的「Sync Project with Gradle Files」按钮同步项目。
- 如果还是报错,执行「File → Invalidate Caches... → Invalidate and Restart」清除缓存后重启IDE。
备选方案(仅限特殊场景)
如果友元配置遇到阻碍,可临时用@PublishedApi标记internal类,让它能通过同一模块的inline函数间接暴露,但这种方式会让类通过inline函数被所有依赖方看到,不符合“仅给特定库访问”的需求,所以优先用友元模块方案:
@PublishedApi internal class SharedInternalClass { // 类内容 }
内容的提问来源于stack exchange,提问作者David Schwartz
相关产品推荐
相关产品推荐

