Bazel Maven迁移传递依赖范围

时间:2017-09-21 11:19:50

标签: bazel

我正在尝试在具有deps和传递依赖项的项目之一上使用generate_workspace。生成generate_workspace.bzl后,我将其复制到WORKSPACE并按照bazel文档中的说明进行操作。虽然我看到在java_library阶段generate_workspace.bzl我的项目中列出的deps及其传递deps无法解析传递deps ..当我在IDEA中导入相同的项目时,我没有看到正确加载的jar。

我怀疑的是,我看到generate_workspace.bzl正在将其临时代表添加为runtime_deps,这意味着它们仅在短暂enter code here ime

期间可用

我在这里创建了所有文件的要点 https://gist.github.com/kameshsampath/8a4bdc8b22d85bbe3f243fa1b816e464

理想情况下,在我的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",
            ],
)

但遗憾的是,由于传递deps没有作为上述声明的一部分加载,因此会产生大量编译错误。最后我必须像https://gist.github.com/kameshsampath/8a4bdc8b22d85bbe3f243fa1b816e464#file-src_main_build

中那样定义

src_main_build是包src / main / BUILD下的BUILD文件 third_party_BUILD是包在third_party / BUILD

下的BUILD

2 个答案:

答案 0 :(得分:1)

Bazel希望您声明所有直接依赖项。即如果您直接使用jar A中的类,则需要将其置于直接依赖项中。

您正在寻找的是一个部署jar。这有点hacky但你实际上可以这样做(在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"], 
)

这会将jar中除neverlink之外的所有依赖项(_deploy.jar)捆绑在一起并重新展开。

答案 1 :(得分:0)

更新:rules_jvm_external是Bazel团队维护的官方规则集,用于以过渡方式获取和解决工件。

您可以找到Spring Boot here的示例。 WORKSPACE文件中的声明如下所示:

load("@rules_jvm_external//:defs.bzl", "maven_install")

maven_install(
    artifacts = [
        "org.hamcrest:hamcrest-library:1.3",
        "org.springframework.boot:spring-boot-autoconfigure:2.1.3.RELEASE",
        "org.springframework.boot:spring-boot-test-autoconfigure:2.1.3.RELEASE",
        "org.springframework.boot:spring-boot-test:2.1.3.RELEASE",
        "org.springframework.boot:spring-boot:2.1.3.RELEASE",
        "org.springframework.boot:spring-boot-starter-web:2.1.3.RELEASE",
        "org.springframework:spring-beans:5.1.5.RELEASE",
        "org.springframework:spring-context:5.1.5.RELEASE",
        "org.springframework:spring-test:5.1.5.RELEASE",
        "org.springframework:spring-web:5.1.5.RELEASE",
    ],
    repositories = [
        "https://jcenter.bintray.com",
    ]
)