Пустая баночка maven, созданная bazel - PullRequest
0 голосов
/ 08 мая 2018

У меня проблемы с использованием зависимостей maven при сборке с bazel. Кажется, проблема в том, что загруженный jar пуст, в нем только манифест. Я дважды и тройно проверил правильность пути и версии, а также использовал sha1, чтобы убедиться, что правильный jar-файл нацелен.

WORKSPACE:

maven_server(
  name = "default",
  url = "http://central.maven.org/maven2/
)

maven_jar(
  name = "org_seleniumhq_selenium_selenium_java",
  artifact = "org.seleniumhq.selenium:selenium-java:3.11.0",
  sha1 = "05b50d4072e0e51779b6e9f3594106312061bfde"
)

BUILD:

package(default_visibility = ["//visibility:public"])

java_library(
  name = "core",
  srcs = glob(
     ["main/core/**/*.java"]
  ),
  resources = glob(["test/resources/*"]),
  deps = ["@org_seleniumhq_selenium_selenium_java//jar"]
)

Вызов «bazel build // src: core» сразу завершается с ошибкой «error: package org.openqa.selenium не существует», однако я вижу, что selenium-java.jar создается в bazel-e2e-testing / external / org_seleniumhq_selenium_selenium_java, но опять же, он пуст.

Любые предложения о том, что я могу делать не так?

Заранее спасибо

1 Ответ

0 голосов
/ 08 мая 2018

Итак, после более подробного изучения того, как работает Базель, я, наконец, выяснил проблему и добавлю ее здесь на случай, если кто-нибудь натолкнется на эту же проблему в будущем.

Основная проблема - это транзитивные зависимости, которые maven_jar не разрешает по умолчанию. Вместо этого, bazel предоставляет полезное правило репозитория transitive_maven_jar , которое можно использовать для разрешения всех транзитивных зависимостей. Также возникла проблема с объявленной фактической зависимостью.

В моем случае я объявил selenium-java зависимостью, однако я использовал импорт только из одной из его транзитивных зависимостей (selenium-api). Из-за этого, selenium-java фактически не компилировался, так как фактически не использовался. Как только я объявил selenium-api своей зависимостью, проблема была решена.

Окончательное РАБОЧЕЕ МЕСТО:

http_archive(
    name = "trans_maven_jar",
    url = "https://github.com/bazelbuild/migration-tooling/archive/master.zip",
    type = "zip",
    strip_prefix = "migration-tooling-master",
)

load("@trans_maven_jar//transitive_maven_jar:transitive_maven_jar.bzl", "transitive_maven_jar")
transitive_maven_jar(
    name = "dependencies",
    artifacts = [
        "org.seleniumhq.selenium:selenium-java:3.11.0",
    ]
)

load("@dependencies//:generate_workspace.bzl", "generated_maven_jars")
generated_maven_jars()

Final BUILD:

package(default_visibility = ["//visibility:public"])

java_library(
    name = "core",
    srcs = glob(
        ["main/core/**/*.java"]
    ),
    resources = glob(["test/resources/*"]),
    deps = [
        "@org_seleniumhq_selenium_selenium_api//jar"
    ]
)

Обратите внимание, что я до сих пор не до конца понял, как работает Базель, поэтому часть того, что я сказал, может быть не совсем правильной, в таком случае, пожалуйста, дайте мне знать, но это то, что мне помогло.

...