Bazel / Golang:规则'go_embed_data'不包含声明的提供程序'GoArchive'

问题描述

我正在尝试为仅嵌入文件集合的项目创建Bazel规则。嵌入规则如下:

go_embed_data(
    name = "my_files_go",src = [
        "embedded/src1","embedded/src2"
    ],package = "my_lib",var = "myFiles",)

然后在其中添加go_library规则:

go_library(
    name = "library",srcs = [
        "library.go",],importpath = "github.com/nickfelker/golang-app",deps = [
        ":my_files_go"
        "//otherLib",)

但是,当我尝试构建它时,最终会收到一个晦涩的错误,我在其他地方找不到。

Error: <target //library:my_files_go> (rule 'go_embed_data') doesn't contain declared provider 'GoArchive'
ERROR: Analysis of target '//:binary' Failed; build aborted: Analysis of target '//library:library' Failed

我应该如何解决这个错误

解决方法

go_embed_data创建的规则不依赖于go_library规则。相反,应将其视为srcs之一,

go_embed_data(
    name = "my_files_go",src = [
        "embedded/src1","embedded/src2"
    ],package = "my_lib",var = "myFiles",)

go_library(
    name = "library",srcs = [
        ":my_files_go","library.go",],importpath = "github.com/nickfelker/golang-app",deps = [
        "//otherLib",)