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

如何在Gradle java-library插件中使用apiElements和runtimeElements configurations?

如何在Gradle java-library插件中使用apiElements和runtimeElements configurations?

嘿,我来给你掰扯清楚怎么在Gradle的java-library插件里用好apiElements和runtimeElements这两个配置项~

Gradle的java-library插件提供了一系列专门的配置项来帮你管理依赖的可见性和传递性,其中apiElements和runtimeElements是给依赖你的库的“消费者”用的核心配置,下面分别给你讲怎么用:

一、apiElements配置

  • 它是消费者编译时依赖的核心配置,会暴露你的库中需要让消费者在编译阶段就能访问到的所有内容,包括:
    • 你的库编译后的类文件
    • 你通过api关键字声明的所有传递性依赖
  • 举个实际的配置例子,在你的构建脚本里可以这样写:
// Groovy DSL
dependencies {
    api 'com.google.guava:guava:32.1.3-jre'
}
// Kotlin DSL
dependencies {
    api("com.google.guava:guava:32.1.3-jre")
}

当其他项目依赖你的库时,它们在编译自己的代码时就能直接使用Guava的类,不需要再单独引入这个依赖——因为apiElements已经把Guava暴露出去了。

二、runtimeElements配置

  • 它是消费者运行时依赖的核心配置,包含你的库运行时需要的所有内容,包括:
    • 你的库编译后的类文件
    • 你通过implementation、runtimeOnly声明的传递性依赖
    • 即使是api声明的依赖,也会被包含在runtimeElements里,保证运行时的完整性
  • 举个例子,如果你这样声明依赖:
// Groovy DSL
dependencies {
    implementation 'org.apache.commons:commons-lang3:3.14.0'
}
// Kotlin DSL
dependencies {
    implementation("org.apache.commons:commons-lang3:3.14.0")
}

这个Commons Lang3依赖只会出现在runtimeElements中,消费你的库的项目在编译自己的代码时看不到这个依赖,但运行项目时,Gradle会自动把这个依赖加入到类路径中,保证程序能正常跑起来。

简单总结一下

  • 如果你希望某个依赖能被消费你的库的项目在编译时访问,就用api声明,它会进入apiElements配置
  • 如果你只希望依赖在自己的库编译时可用,且只在消费方运行时被引入,就用implementation声明,它会进入runtimeElements配置

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 12:35:31