2017-09-21 60 views
1

我正在嘗試在其中一個項目中使用generate_workspace,該項目具有迭代和傳遞依賴性。一旦生成了generate_workspace.bzl,我將其複製到WORKSPACE並遵循bazel文檔中的說明。雖然我看到在generate_workspace.bzl我的項目中列出的代碼和他們的傳遞代價在java_library階段無法解決傳遞代價..當我在IDEA中導入相同的項目時,我沒有看到正確加載的罐子。Bazel Maven遷移傳遞依賴關係作用域

我懷疑是我看到generate_workspace.bzl只欠幅enter code here IME

我已經在這裏創造的所有文件 https://gist.github.com/kameshsampath/8a4bdc8b22d85bbe3f243fa1b816e464

的要旨過程中添加了transitve DEPS爲 runtime_deps這意味着它們可在DEPS

理想在我的Maven項目我只需要https://gist.github.com/kameshsampath/8a4bdc8b22d85bbe3f243fa1b816e464#file-src_main_build-L8-L9,雖然generate_workspace.bzl已經解決了正確我認爲它不夠的,如果我的src/main/BUILD看起來像

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", 
      ], 
) 

但遺憾的是,由於傳遞代碼並未作爲上述聲明的一部分加載,因此存在大量編譯錯誤。最終我不得不定義就像我在https://gist.github.com/kameshsampath/8a4bdc8b22d85bbe3f243fa1b816e464#file-src_main_build

src_main_build是如何做到的是建立文件包下的src/main/BUILD third_party_BUILD是包下THIRD_PARTY的BUILD/BUILD

+0

我認爲一個片段會在這裏走很長的路。另外,你是否看到「出口」的使用? – Ittai

+0

@Ittai添加了代碼片段並鏈接到主題 – Kamesh

回答

1

巴澤勒希望你申報你的所有直接依賴。即如果您直接使用jar A中的類,則需要在直接依賴中使用它。

你正在尋找的是一個部署jar。這是一個有點哈克但實際上你可以做到這樣(在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"], 
) 

這將捆綁所有依賴除了neverlink一個在一個罐子裏(在_deploy.jar)和reexpose它。

+0

Damien,他不能只使用「deps」,然後迭代strict-deps中的幾個警告?這將通過他需要傳遞的幾個障礙,但仍然會給他一個更清潔的依賴關係圖 – Ittai

+0

Damien,得到錯誤'錯誤:/ Users/kameshs/MyLabs/bazel/bazel-demos/spring-boot-bazel-demo/src/main/BUILD:7:14:在java_binary規則的deps屬性中// src/main:main:java_binary rule'// third_party:org_springframework_boot_spring_boot_starter_web _bin'在這裏放錯了位置(期望cc_binary,cc_library,genrule,genproto,java_import,java_library ,java_proto_library,java_lite_proto_library,proto_library,sh_binary或sh_library)和'// third_party:org_springframework_boot_spring_boot_starter_web_bin'沒有強制提供者:'link_params'或'java_common.provider'。 – Kamesh

+0

Kamesh:你可以給你的構建文件的內容嗎? Ittai:是的,他可以而且應該得到一個清晰的圖表,但他希望能夠導入2個罐子...... –