1

在尝试构建一个使用 bazel 的 git repo 时,我得到了 //external:android/sdk 没有绑定到任何东西的错误,我找不到这个配置的位置,所以我可以修复它。

我已经加载了一个新的 ubuntu 14.04,我正在尝试从源代码构建 github.com/google/shipshape。我已按照此处给出的说明安装了构建它所需的一切。

基本上安装了 golang、openjdk-8-jdk、openjdk-8-source、bazel 并运行了以下内容:

mkdir -p github.com/google && cd github.com/google
git clone https://github.com/google/shipshape.git
cd shipshape
./configure        # Run initial Shipshape+Bazel setup
bazel build //...  # Build all Shipshape source

但是当我开始构建时,bazel build //...我得到了这个错误:

____Loading package: shipshape
____Loading package: shipshape/util/rpc/client
____Loading package: shipshape/analyzers/codealert
____Loading package: shipshape/contrib/phabricator
____Loading package: shipshape/javatests/com/google/shipshape/analyzers
____Loading package: third_party/kythe/java/com/google/devtools/kythe/platform/shared
____Loading package: third_party/go-glog
____Loading package: third_party/guava
____Loading package: third_party/gson
____Loading package: shipshape/test/dind/docker
____Loading package: third_party/bazel/tools/jdk
____Loading package: tools/test
____Loading...
____Loading package: @bazel_tools//tools/cpp
____Loading package: @local-jdk//
____Loading package: @bazel_tools//tools/genrule
____Loading package: @bazel_tools//tools/test
____Loading package: @bazel_tools//third_party/java/jdk/langtools
____Loading complete.  Analyzing...
ERROR: /DEFAULT.WORKSPACE:75:1: in bind rule //external:android/sdk: The external label '//external:android/sdk' is not bound to anything.
ERROR: Analysis of target '//tools/defaults:android_jar' failed; build aborted.
____Elapsed time: 3.086s

谷歌搜索给了我这个链接,上面写着

这根本没有告诉您您需要更新 WORKSPACE 中的某些信息以指向您的 Android SDK。有一个更友好的错误消息会很好。

我解释说,因为某处有我应该更新的绑定,所以需要更新现有的代码行。

但是我应该在其中执行构建的文件夹中的 WORKSPACE 是空的,所以应该有另一个文件具有我可以编辑的绑定。

我找到了这个文件夹/home/alex/.bazel/base_workspace,但我没有找到任何似乎是正确编辑的 WORKSPACE。

我还用 grep 找到了这些: ~/.cache/bazel/_bazel_root/hash/README ~/.cache/bazel/_bazel_root/hash/external/local-jdk/WORKSPACE 但是看到它们在缓存中,那可能是错误的。

所以要么 DEFAULT.WORKSPACE 在其他地方,我需要在那里做一些绑定的事情来让它找到我的 android sdk,或者 DEFAUL.WORKSPACE 真的是我的 shipshape 文件夹中的空 WORKSPACE,它在 bazel 构建运行时被填充,然后被删除.

但无论哪种情况,我都不知道应该如何将 //external:android/sdk 绑定到任何东西。

4

1 回答 1

1

目前,构建//...并不是很好,因为它包含了 Bazel 构建任何语言或平台可能需要的一切。(这实际上已在 HEAD 修复,但尚未发布)。我建议bazel build //shipshape/...现在跑步。

(如果您正在构建 Android 目标,您可能希望按照此处所述设置您的 WORKSPACE 文件,但您不是,所以不要打扰。)

于 2016-01-27T21:11:14.177 回答