使用 bazel 从 Maven 导入并使用外部 jar 文件
Import and use an exernal jar file from maven using bazel
我试图了解如何使用 bazel 构建 java/scala 项目,因此我创建了一个玩具项目,其中包含一些琐碎的 类 和一个使用最大规模的测试框架。我试图通过创建以下工作区文件从 Maven 导入所有传递依赖项:
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"]
)
将 link 中建议的外部 jar 引用为 <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 的几个显式依赖项。
您看到的错误是由于 bazel 0.5.1 和 bazel 0.5.2 之间的重大更改违反了 Scala 规则。在撰写本文时,https://github.com/bazelbuild/rules_scala 中的 README 表示 "you must have bazel 0.5.2 or later"。
您的 BUILD 和 WORKSPACE 文件是正确的。
我试图了解如何使用 bazel 构建 java/scala 项目,因此我创建了一个玩具项目,其中包含一些琐碎的 类 和一个使用最大规模的测试框架。我试图通过创建以下工作区文件从 Maven 导入所有传递依赖项:
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"]
)
将 link 中建议的外部 jar 引用为 <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 的几个显式依赖项。
您看到的错误是由于 bazel 0.5.1 和 bazel 0.5.2 之间的重大更改违反了 Scala 规则。在撰写本文时,https://github.com/bazelbuild/rules_scala 中的 README 表示 "you must have bazel 0.5.2 or later"。
您的 BUILD 和 WORKSPACE 文件是正确的。