You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Kotlin中的internal类对另一个跨项目模块可见?

跨项目共享Kotlin Internal类的解决方案
  • 正确配置Kotlin友元模块参数
    你之前尝试的-Xfriend-paths思路没问题,但路径不能指向源码目录,得关联到目标库的编译输出目录。具体配置分两步:

    1. 定义internal类的库(比如叫lib-core)无需额外友元配置,保证正常编译即可。
    2. 需要访问该类的关联库(比如叫lib-partner),在Gradle里添加编译器参数:
      kotlin {
          compilerOptions {
              // 替换成lib-core的实际编译输出路径,多平台项目要指定target(如jvmMain)
              freeCompilerArgs.add("-Xfriend-paths=${project(":lib-core").buildDir}/classes/kotlin/main")
          }
      }
      
  • 确保项目依赖关系正确
    关联库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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 16:39:54