截至 2019 年 4 月:
更新:rules_jvm_external 是 Bazel 团队的新规则集,用于以传递方式获取和解析工件。
在这种情况下,WORKSPACE 文件将包含如下内容:
load("@rules_jvm_external//:defs.bzl", "maven_install")
maven_install(
artifacts = [
"com.android.volley:volley:1.1.0",
"com.google.code.gson:gson:2.6.2",
"com.android.support:design:27.0.2",
"com.android.support:support_annotations:jar:27.0.2",
],
repositories = [
"https://jcenter.bintray.com",
"https://maven.google.com",
]
)
然后在BUILD文件中,可以像这样直接依赖Volley和Gson:
android_library(
name = "my_lib",
srcs = # ...
deps = [
"@maven//:com_android_volley_volley",
"@maven//:com_google_code_gson_gson",
"@maven//:com_android_support_design",
"@maven//:com_android_support_support_annotations",
],
)
截至 2018 年 5 月:
gmaven_rules 和 maven_jar 均已弃用。请不要再使用它们了。
来自docs.bazel.build 上的文档,并添加了相关说明:
Maven Central Repository 上托管的 Maven 依赖项
对未托管的 Maven 依赖项使用 maven_jar 存储库规则
谷歌马文。例如,要使用 Volley 1.1.0 和 Gson 2.6.2,添加
在项目目录的顶层WORKSPACE 文件中添加以下行:
maven_jar(
name = "com_android_volley_volley",
artifact = "com.android.volley:volley:1.1.0",
)
maven_jar(
name = "com_google_code_gson",
artifact = "com.google.code.gson:gson:2.6.2",
)
然后,您可以在 BUILD 文件中依赖它们:
android_library(
name = "my_app_lib",
srcs = [..],
deps = [
"@com_android_volley_volley//jar",
"@com_google_code_gson//jar",
],
)
注意maven_jar是不传递的,所以它不会下载指定jar的依赖。您需要手动为传递依赖项指定额外的maven_jar 规则,或使用bazel-deps 等工具自动生成它们。
对于托管在Google's Maven repository 上的依赖项,
@gmaven_rules 提供了一种获取依赖项的简单方法
通过直接指定工件坐标以gmaven_artifact 托管。
要使用@gmaven_rules,请将这些行添加到WORKSPACE 文件中:
# Google Maven Repository
GMAVEN_TAG = "20180513-1"
http_archive(
name = "gmaven_rules",
strip_prefix = "gmaven_rules-%s" % GMAVEN_TAG,
url = "https://github.com/bazelbuild/gmaven_rules/archive/%s.tar.gz" % GMAVEN_TAG,
)
load("@gmaven_rules//:gmaven.bzl", "gmaven_rules")
gmaven_rules()
然后,在 BUILD 文件的开头加载 gmaven_artifact 宏
使用它:
load("@gmaven_rules//:defs.bzl", "gmaven_artifact")
android_library(
name = "my_app_lib",
srcs = glob(["java/**/*.java"]),
deps = [
gmaven_artifact("com.android.support:design:aar:27.0.2"),
gmaven_artifact("com.android.support:support_annotations:jar:27.0.2"),
]
# ...
)
不同于maven_jar,gmaven_artifact是传递性的,所以你只需要指定工件的坐标,@gmaven_rules会自动解析依赖。