Прямо сейчас я делаю вот так
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. Но я получаю эту ошибку:
ERROR: /home/abhi/Desktop/Git/SENA-28/tensorflow/SenDetect/BUILD:24:1: //SenDetect:sendetect: invalid label '@androidsdk//com.android.volley:volley:1.1.0' in element 3 of attribute 'deps' in 'android_binary' rule: invalid target name 'volley:1.1.0': target names may not contain ':'




Обновление: 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",
],
)
И gmaven_rules, и maven_jar устарели. Пожалуйста, не используйте их больше.
Из документации на docs.bazel.build, отредактированной с дополнительными соответствующими инструкциями:
Use the
maven_jarrepository rule for Maven dependencies not hosted on Google Maven. For example, to use Volley 1.1.0 and Gson 2.6.2, add the following lines to theWORKSPACEfile at the top level of the project directory: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", )Then, you can depend on them in your
BUILDfiles: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, для их автоматического создания.
For dependencies hosted on Google's Maven repository,
@gmaven_rulesprovides a simple way to fetch dependencies hosted withgmaven_artifactby specifying the artifact coordinate directly.To use
@gmaven_rules, add these lines to theWORKSPACEfile:# 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()Then, load the
gmaven_artifactmacro at the beginning of your BUILD file to use it: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 автоматически разрешит зависимости.
@Jin Я получаю ошибку Failed to load Starlark extension '@rules_jvm_external//:defs.bzl'. с bazel 0.25. Что мне не хватает?
@expert Пожалуйста, откройте проблему в репозитории rules_jvm_external GitHub с более подробной информацией.
Как мне использовать библиотеку в моем файле .java? там написано not found
Большое спасибо. Ты палочка-выручалочка :)