2017-08-05 135 views
1

我想了解如何使用bazel來構建java/scala項目,所以我創建了一個玩具項目,有幾個微不足道的類和一個測試使用scalatest框架。我試圖通過創建以下工作區文件導入從行家都傳遞依賴:導入並使用從maven exernal jar文件使用bazel

workspace(name = "scala_bazel_example") 

git_repository(
    name = "io_bazel_rules_scala", 
    remote = "git://github.com/bazelbuild/rules_scala", 
    commit = "aaa6c7d4db4f231a541f20a60760420f4bdd11e8" 
) 

load("@io_bazel_rules_scala//scala:scala.bzl", "scala_repositories") 

scala_repositories() 

maven_jar(
    name = "junit", 
    artifact = "junit:junit:4.11", 
) 

maven_jar(
    name = "org_scalatest", 
    artifact = "org.scalatest:scalatest_2_11:3.0.1", 
) 

maven_jar(
    name = "org_hamcrest", 
    artifact = "org.hamcrest:hamcrest-core:1.3", 
) 

https://docs.bazel.build/versions/master/be/workspace.html#maven_jar

然後我試圖建立我的測試與下面的生成文件:

scala_test(
    name = "example-test", 
    srcs = glob(["**/*.scala"]), 
    deps = [ 
    "@org_scalatest//jar", 
    "@junit//jar", 
    "@org_hamcrest//jar", 
    "//src/scala/main/src/com/foo/util:example-lib"] 
) 

按照鏈接中建議的外部瓶子引用<name>//jar

然而,當我建,我得到以下錯誤:

$ bazel build :example-test 
ERROR: /home/ubuntu/.cache/bazel/_bazel_ubuntu/c83ae3b365c8d335f0b135ef3a055202/external/io_bazel_rules_scala/third_party/plugin/src/main/BUILD:5:1: in scala_library_for_plugin_bootstrapping rule @io_bazel_rules_scala//third_party/plugin/src/main:dependency_analyzer: 
Traceback (most recent call last): 
     File "/home/ubuntu/.cache/bazel/_bazel_ubuntu/c83ae3b365c8d335f0b135ef3a055202/external/io_bazel_rules_scala/third_party/plugin/src/main/BUILD", line 5 
       scala_library_for_plugin_bootstrapping(name = 'dependency_analyzer') 
     File "/home/ubuntu/.cache/bazel/_bazel_ubuntu/c83ae3b365c8d335f0b135ef3a055202/external/io_bazel_rules_scala/scala/scala.bzl", line 576, in _scala_library_impl 
       _lib(ctx, True) 
     File "/home/ubuntu/.cache/bazel/_bazel_ubuntu/c83ae3b365c8d335f0b135ef3a055202/external/io_bazel_rules_scala/scala/scala.bzl", line 503, in _lib 
       _collect_jars_from_common_ctx(ctx) 
     File "/home/ubuntu/.cache/bazel/_bazel_ubuntu/c83ae3b365c8d335f0b135ef3a055202/external/io_bazel_rules_scala/scala/scala.bzl", line 486, in _collect_jars_from_common_ctx 
       _collect_jars(ctx.attr.deps + auto_deps + extr..., ...) 
     File "/home/ubuntu/.cache/bazel/_bazel_ubuntu/c83ae3b365c8d335f0b135ef3a055202/external/io_bazel_rules_scala/scala/scala.bzl", line 463, in _collect_jars 
       _collect_jars_when_dependency_analyzer_is_off(dep_targets) 
     File "/home/ubuntu/.cache/bazel/_bazel_ubuntu/c83ae3b365c8d335f0b135ef3a055202/external/io_bazel_rules_scala/scala/scala.bzl", line 422, in _collect_jars_when_dependency_analyzer_is_off 
       java_provider.compile_jars 
'java_common.provider' object has no attribute 'compile_jars' 
Available attributes: transitive_runtime_jars. 
ERROR: Analysis of target '//src/scala/test/src/com/foo/util:example-test' failed; build aborted. 
INFO: Elapsed time: 0.287s 

有沒有人有一個想法是什麼,我做錯了什麼?我四處搜索,找不到一個清晰的例子,它展示瞭如何編寫一組基本的WORKSPACE和BUILD文件來構建一個小項目,具體取決於來自maven的幾個顯式依賴項。

+0

'bazel版本'的輸出是什麼?你的例子用bazel 0.5.3爲我工作。您的WORKSPACE和BUILD文件看起來是正確的。 – Adam

+0

版本是0.5.1。 – jonderry

回答

2

您看到的錯誤是由於bazel 0.5.1和bazel 0.5.2之間的突破性變化而打破了scala規則。截至寫作時,在https://github.com/bazelbuild/rules_scala的自述文件中提到「你必須有0.5.2或更高版本」。

您的BUILD和WORKSPACE文件是正確的。