2017-09-21 1 views
1

Ich versuche, die generate_workspace für eines der Projekte, die Deps und transitive Abhängigkeiten hat. Sobald die generate_workspace.bzl generiert wurde, kopierte ich es in den WORKSPACE und folgte der Anweisung in der Bazel-Dokumentation. Obwohl ich die Deps und ihre transitiven Deps aufgelistet in der generate_workspace.bzl mein Projekt während der Phase java_library ist nicht in der Lage, transitive Deps .. Wenn ich das gleiche Projekt in IDEA importieren, sehe ich nicht die Gläser korrekt geladen.Bazel Maven Migration Transitive Abhängigkeiten Scope

Mein Zweifel ist für die deps ich die generate_workspace.bzl sehen seine transitve deps als runtime_deps Zugabe das heißt, sie nur während Runt enter code here ime

Ich habe https://gist.github.com/kameshsampath/8a4bdc8b22d85bbe3f243fa1b816e464

hier Kern aller Dateien erstellt verfügbar sind

Idealer Projekt in meinem maven ich brauche nur https://gist.github.com/kameshsampath/8a4bdc8b22d85bbe3f243fa1b816e464#file-src_main_build-L8-L9, obwohl generate_workspace.bzl aufgelöst hat zu Recht dachte ich, seine genug, wenn mein src/main/BUILD wie

sieht
java_binary(
     name = "main", 
     srcs = glob(["java/**/*.java"]), 
     resources = glob(["resources/**"]), 
     main_class = "com.redhat.developers.DemoApplication", 
     # FIXME why I should import all the jars when they are transitive to spring boot starter 
     deps = [ 
      "//third_party:org_springframework_boot_spring_boot_starter_actuator", 
      "//third_party:org_springframework_boot_spring_boot_starter_web", 
      ], 
) 

Aber leider gibt es viele Kompilierungsfehler, da transitive Deps nicht als Teil der obigen Deklaration geladen werden. schließlich habe ich wie zu definieren, wie ich tat, in der https://gist.github.com/kameshsampath/8a4bdc8b22d85bbe3f243fa1b816e464#file-src_main_build

src_main_build ist BUILD-Datei unter Paket src/main/BUILD third_party_BUILD ist die BUILD unter Paket third_party/BUILD

+0

Ich denke, ein Schnipsel würde hier einen langen Weg gehen. Gibt es auch eine Verwendung von "Exporten"? – Ittai

+0

@Itai die Code-Schnipsel hinzugefügt und einen Link zu gist – Kamesh

Antwort

1

Bazel Sie alle direkten Abhängigkeiten erklären erwartet . I.e. Wenn Sie direkt eine Klasse von jar A verwenden, müssen Sie sie in Ihren direkten Abhängigkeiten haben.

Was Sie suchen, ist ein Bereitstellungsglas. Das ist ein bisschen hacky aber man kann es tatsächlich auf diese Weise tun (in third_party/BUILD):

java_binary(
    name = "org_springframework_boot_spring_boot_starter_actuator_bin", 
    main_class = "not.important", 
    runtime_deps = [":org_springframework_boot_spring_boot_starter_actuator"],) 

java_import(
    name = "springframework_actuator", 
    jars = [":org_springframework_boot_spring_boot_starter_actuator_bin_deploy.jar"], 
) 

Dadurch werden alle Abhängigkeiten mit Ausnahme der neverlink ein in einem Glas bündeln (die _deploy.jar) und reexpose es.

+0

Damien, kann er nicht einfach "Deps" verwenden und dann ein paar Warnungen von strict-deps durchlaufen? Das wird ihn durch die wenigen Hürden führen, die er transitiv benötigt, aber ihm immer noch ein saubereres Abhängigkeitsdiagramm geben wird. – Ittai

+0

Damien, hat den Fehler 'ERROR:/Benutzer/kameshs/​​MyLabs/bazel/bazel-demos/spring-boot-bazel-demo/src/main/BUILD: 7: 14: in deps Attribut der java_binary Regel // src/main: main: java_binary Regel '// dritte_party: org_springframework_boot_spring_boot_starter_web _bin' ist hier verlegt (erwartet cc_binary, cc_library, genrule, genproto, java_import, java_library , java_proto_library, java_lite_proto_library, proto_library, sh_binary oder sh_library) und '// third_party: org_springframework_boot_spring_boot_starter_web_bin' hat keine obligatorischen Provider: 'link_params' oder 'java_common.provider'.' – Kamesh

+0

Kamesh: Können Sie den Inhalt Ihrer Build-Dateien angeben? Ittai: Ja, er könnte und sollte eine saubere Grafik bekommen, aber er möchte nur 2 Gläser importieren können ... –

Verwandte Themen