簡體   English   中英

如何在Bazel中為Android項目添加Maven依賴項(例如Volley,Gson)?

[英]How to add Maven dependencies (e.g. Volley, Gson) in Bazel for an Android project?

現在我這樣做

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.0'在'android_binary'規則中屬性'deps'的元素3中:無效的目標名稱'volley:1.1.0':目標名稱可能不包含':'

截至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_rulesmaven_jar都已棄用。 請不要再使用它們了。

docs.bazel.build上的文檔中,使用其他相關說明進行編輯:

在Maven Central Repository上托管的Maven依賴項

maven_jar存儲庫規則用於未在Google Maven上托管的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等工具自動生成它們。

托管在Google Maven Repository上的Maven依賴項( https://maven.google.com

對於托管在Google的Maven存儲庫依賴項, @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將自動解析依賴關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM