从源码构建Dagger时kt_jvm_library规则构建失败求助
构建Dagger源码时出现"Error in kt_jvm_library"错误
问题详情
从源码构建Dagger 2.51.1时,所有构建均失败,核心错误为Error: 'JavaInfo' value has no field or method 'transitive_deps',完整错误日志如下:
All builds fail with "Error in kt_jvm_library" Error log - ERROR: /project/dagger/java/dagger/spi/model/BUILD:36:15: in kt_jvm_library rule //java/dagger/spi/model:model: Traceback (most recent call last): File "/private/var/tmp/_bazel_cd/f202618f9a0c0f8e33bf23f70a8036c4/external/io_bazel_rules_kotlin/kotlin/internal/jvm/impl.bzl", line 221, column 36, in kt_jvm_library_impl _kt_jvm_produce_jar_actions(ctx, "kt_jvm_library") if ctx.attr.srcs or ctx.attr.resources else export_only_providers( File "/private/var/tmp/_bazel_cd/f202618f9a0c0f8e33bf23f70a8036c4/external/io_bazel_rules_kotlin/kotlin/internal/jvm/compile.bzl", line 535, column 50, in kt_jvm_produce_jar_actions outputs_struct = _run_kt_java_builder_actions( File "/private/var/tmp/_bazel_cd/f202618f9a0c0f8e33bf23f70a8036c4/external/io_bazel_rules_kotlin/kotlin/internal/jvm/compile.bzl", line 794, column 36, in _run_kt_java_builder_actions _run_merge_jdeps_action( File "/private/var/tmp/_bazel_cd/f202618f9a0c0f8e33bf23f70a8036c4/external/io_bazel_rules_kotlin/kotlin/internal/jvm/compile.bzl", line 264, column 70, in _run_merge_jdeps_action inputs = depset(jdeps, transitive = [depset([], transitive = [dep.transitive_deps for dep in deps])]) Error: 'JavaInfo' value has no field or method 'transitive_deps' Available attributes: _compile_time_java_dependencies, _constraints, _neverlink, _transitive_full_compile_time_jars, annotation_processing, api_generating_plugins, compilation_info, compile_jars, full_compile_jars, java_outputs, module_flags_info, outputs, plugins, runtime_output_jars, source_jars, transitive_compile_time_jars, transitive_native_libraries, transitive_runtime_jars, transitive_source_jars ERROR: /Users/cd/project/dagger/java/dagger/spi/model/BUILD:36:15: Analysis of target '//java/dagger/spi/model:model' failed ERROR: Analysis of target '//java/dagger/spi:spi' failed; build aborted: Analysis failed INFO: Elapsed time: 124.500s, Critical Path: 0.00s INFO: 1 process: 1 internal. ERROR: Build did NOT complete successfully
环境信息
- Android Studio Giraffe 2022.3.1 Patch 4
- Bazel插件版本:2024.01.16-aswb.0.1-api-version-223
- Bazel版本:Homebrew安装的7.1.2
- Dagger仓库版本:dagger-2.51.1
解决方案
问题根源是Bazel 7.x对JavaInfo结构体做了破坏性变更,移除了transitive_deps字段,而Dagger 2.51.1依赖的旧版Kotlin构建规则仍在使用该废弃字段。以下两种方法二选一即可:
方法1:降级Bazel到兼容版本
Dagger 2.51.1官方推荐使用Bazel 6.x系列,操作步骤:
- 卸载当前Bazel:
brew uninstall bazel - 安装指定版本:
brew install bazel@6 - 切换到6.x版本:
brew link --overwrite bazel@6
方法2:升级Dagger依赖的Kotlin规则
若不想降级Bazel,可手动更新Dagger项目的Kotlin规则版本以适配Bazel 7.x:
- 打开Dagger根目录下的
WORKSPACE文件 - 找到
io_bazel_rules_kotlin的归档配置,将版本更新至支持Bazel 7.x的版本(如v1.10.0):http_archive( name = "io_bazel_rules_kotlin", urls = ["https://github.com/bazelbuild/rules_kotlin/releases/download/v1.10.0/rules_kotlin-v1.10.0.tar.gz"], sha256 = "a9f4a4f3a2a2d2f8e4a9f0a8b2e0b4a6f4b5b3c1d0e1e8e3e9e1e0e2e3e4e5e6", ) - 重新执行构建:
bazel build //...
验证
构建命令执行后,若不再出现transitive_deps相关错误,说明问题已解决。
内容的提问来源于stack exchange,提问作者chaitanyad
相关产品推荐
相关产品推荐

