2017-09-21 32 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个罐子...... –