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

Gradle配置:如何让ProjectA引入Kotlin多平台共享库并访问代码?

解决Kotlin多平台库跨Gradle项目共享的问题

问题根源分析

直接通过files()引入Kotlin多平台(KMP)生成的jar,大概率是以下原因导致无法访问数据类:

  • KMP库的JVM jar需要伴随Kotlin元数据文件才能被其他Kotlin项目正确识别,直接文件依赖未处理元数据关联
  • ProjectA未启用Kotlin JVM插件,无法解析Kotlin数据类的字节码
  • 库的jar生成不完整,缺少目标类或元数据文件

方案1:修复本地lib目录引入配置

步骤1:确保SharedProjectLib生成完整的JAR

检查KMP项目的build.gradle.kts配置,确保JVM目标生成包含元数据的标准JAR:

plugins {
    kotlin("multiplatform") version "1.9.20"
}

kotlin {
    jvm {
        compilations.all {
            kotlinOptions.jvmTarget = "17" // 与ProjectA的JVM版本保持一致
        }
        withJava() // 启用Java互操作,保证JAR结构符合标准
        tasks.jar {
            from(sourceSets.main.get().output) // 确保包含所有编译输出
        }
    }
    sourceSets {
        val jvmMain by getting {
            // 确认数据类放在默认源码目录:src/jvmMain/kotlin
        }
    }
}

执行./gradlew jvmJar生成JAR后,解压检查是否存在你的包路径/YourDataClass.class和对应的YourDataClass.kotlin_metadata文件。

步骤2:配置ProjectA的依赖

确保ProjectA启用Kotlin JVM插件,并正确引入依赖:

plugins {
    kotlin("jvm") version "1.9.20" // 版本需与SharedProjectLib完全一致
    // 若为Spring Boot等框架,添加对应插件
}

dependencies {
    implementation(files("lib/SharedProjectLib-jvm-1.0-SNAPSHOT.jar"))
    implementation(kotlin("stdlib-jdk8")) // 显式引入Kotlin标准库,避免依赖缺失
}

执行./gradlew clean build --refresh-dependencies刷新依赖并重新构建。


方案2:本地Maven仓库发布(推荐,更稳定)

通过本地Maven仓库发布KMP库,让Gradle自动处理元数据和依赖传递,避免手动引入JAR的问题:

步骤1:配置SharedProjectLib的发布

修改build.gradle.kts添加Maven发布插件:

plugins {
    kotlin("multiplatform") version "1.9.20"
    `maven-publish`
}

kotlin {
    jvm {
        withJava()
    }
    // 其他KMP目标配置(如非必需可省略)
}

publishing {
    repositories {
        mavenLocal() // 发布到本地Maven仓库
    }
    publications {
        create<MavenPublication>("jvm") {
            from(components["jvm"])
            groupId = "com.yourcompany" // 自定义你的groupId
            artifactId = "SharedProjectLib"
            version = "1.0-SNAPSHOT"
        }
    }
}

执行./gradlew publishToMavenLocal完成发布。

步骤2:ProjectA中引入依赖

修改build.gradle.kts添加本地仓库和依赖:

repositories {
    mavenLocal() // 必须添加本地Maven仓库
    mavenCentral()
}

dependencies {
    implementation("com.yourcompany:SharedProjectLib:1.0-SNAPSHOT")
}

同步Gradle后即可正常访问库中的数据类。


常见排查点

  • 检查ProjectA的Kotlin插件版本与SharedProjectLib是否一致,版本不匹配会导致解析失败
  • 若使用IDE,执行File > Invalidate Caches...清理缓存后重启
  • 确认SharedProjectLib的源码目录结构正确(JVM目标代码放在src/jvmMain/kotlin下)

内容的提问来源于stack exchange,提问作者da_user_2023

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 10:40:19