在尝试构建一个使用 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 绑定到任何东西。