在尝试构建使用bazel的git repo时,我得到了//外部的错误: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
谷歌搜索给了我this链接,其中说明了
根本没有告诉你需要更新一些信息 在您的WORKSPACE中指向您的Android SDK。真是太好了 有一个更友好的错误消息。
我解释为因为我应该更新某个绑定区域,所以现有的代码行需要更新。
但是我应该在其中执行内置的文件夹中的WORKSPACE是空的,所以应该有另一个文件,它有一个我可以编辑的绑定。
我找到了这个文件夹/home/alex/.bazel/base_workspace
,但我找不到任何似乎是正确编辑的工作空间。
我也用grep找到了这些:
~/.cache/bazel/_bazel_root/hash/README
~/.cache/bazel/_bazel_root/hash/external/local-jdk/WORKSPACE
但看到它们在缓存中可能是错误的。
所以要么DEFAULT.WORKSPACE在别的地方,我需要在那里做一些绑定来找到我的android sdk,或者DEFAUL.WORKSPACE真的是我的shiphape文件夹里面的空WORKSPACE,它在bazel构建运行时填充然后删除。
但在任何一种情况下,我都不知道如何将// external:android / sdk绑定到任何东西。
答案 0 :(得分:1)
目前,构建//...
并不是很有效,因为它包含了Bazel构建任何语言或平台所需的一切。 (这实际上是fixed at HEAD,但尚未发布)。我建议暂时运行bazel build //shipshape/...
。
(如果您正在构建Android目标,则需要按照here所述设置您的WORKSPACE文件,但您不是,所以不要打扰。)