如何设置 //external:android/sdk 当它没有绑定到任何东西时

How to set //external:android/sdk when it is not bound to anything

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

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

基本安装了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

一个 Google 搜索给了我 this link 其中指出

which doesn't tell you at all that you need to update some information in your WORKSPACE to point to your Android SDK. It would be nice to have a friendlier error message.

我认为这是因为我应该更新某处的绑定,所以需要更新现有的代码行。

但是我应该在其中执行构建的文件夹中的 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 文件夹,它在 bazel 构建运行时被填充,然后被删除。

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

目前,构建 //... 效果不佳,因为它包含 Bazel 构建任何语言或平台可能需要的一切。 (这实际上已经 fixed at HEAD,但尚未发布)。我现在推荐 运行 bazel build //shipshape/...

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