如何在Bazel中为Android项目添加Maven依赖项(例如Volley,Gson)?

时间:2018-05-29 13:21:28

标签: java android gson android-volley bazel

现在我正在这样做

deps = [
   ":tensorflow_native_libs",
   "//tensorflow/contrib/lite/java:tensorflowlite",
   "@androidsdk//com.android.support:appcompat-v7-25.0.0",
   "@androidsdk//com.android.volley:volley:1.1.0",
   "@androidsdk//com.google.code.gson:gson:2.6.2"
],

android_binary内。但是我收到了这个错误:

  

错误:/ home / abhi / Desktop / Git / SENA-28 / tensorflow / SenDetect / BUILD:24:1:// SenDetect:sendetect:无效标签'@androidsdk // com.android.volley:volley:1.1 'android_binary'规则中属性'deps'的元素3中的.0':无效的目标名称'volley:1.1.0':目标名称可能不包含':'

1 个答案:

答案 0 :(得分:3)

截至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文件中,您可以直接依赖Guava:

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_rulesmaven_jar。请不要再使用它们了。

来自docs.bazel.build的文档,使用其他相关说明进行编辑:

Maven中心存储库

上托管的Maven依赖项
  

对未托管的Maven依赖项使用maven_jar存储库规则   谷歌Maven。例如,要使用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之类的工具自动生成它们。

Maven依赖项托管在Google Maven资源库(https://maven.google.com

  

对于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将自动解析依赖关系。