在 Java 中管理 Beam 依赖项

管理 Java 依赖项可能很困难,如果不正确处理,可能会导致各种问题,因为在使用特定且以前未经测试的组合时可能会出现不兼容性。

为了使该过程更容易,Beam 现在提供了 物料清单 (BOM) 工件,这些工件将帮助依赖项管理工具选择兼容的组合。

我们希望这将使您更容易使用 Apache Beam,并在升级到新版本时更容易过渡。

当引入不兼容的类和库时,代码容易出现错误,例如 NoClassDefFoundErrorNoSuchMethodErrorNoSuchFieldErrorFATAL ERROR in native method

导入 Apache Beam 时,推荐使用物料清单 (BOM)。BOM 的工作方式是向依赖项管理解析工具提供提示,因此当项目导入未指定或不明确的依赖项时,它将知道要使用哪个版本。

目前 Beam 提供了两个 BOM

  • beam-sdks-java-bom,它管理将使用哪些 Beam 依赖项,因此您只需指定一次版本。
  • beam-sdks-java-io-google-cloud-platform-bom,一个更全面的列表,它管理 Beam 以及 GCP 客户端和第三方依赖项。

由于在使用第三方依赖项时更容易出现错误,因此建议使用该依赖项来最大程度地减少任何冲突。

为了使用 BOM,必须将工件导入到您的 Maven 或 Gradle 依赖项配置中。例如,要使用 beam-sdks-java-io-google-cloud-platform-bom,必须进行以下更改(并确保用有效版本替换 BEAM_VERSION

Maven

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.apache.beam</groupId>
      <artifactId>beam-sdks-java-google-cloud-platform-bom</artifactId>
      <version>BEAM_VERSION</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

Gradle

dependencies {
    implementation(platform("org.apache.beam:beam-sdks-java-google-cloud-platform-bom:BEAM_VERSION"))
}

导入 BOM 后,可以删除依赖项的特定版本固定,例如 org.apache.beamio.grpccom.google.cloud(包括 libraries-bom) 的任何内容。

不要完全删除依赖项,因为它们不会被 BOM 自动导入。重要的是要保留依赖项,而不指定版本。例如,在 Maven 中

<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-sdks-java-core</artifactId>
</dependency>

或者 Gradle

implementation("org.apache.beam:beam-sdks-java-core")

要获取特定 BOM 管理的依赖项版本的完整列表,可以使用 Maven 工具 help:effective-pom。例如

mvn help:effective-pom -f ~/.m2/repository/org/apache/beam/beam-sdks-java-google-cloud-platform-bom/BEAM_VERSION/beam-sdks-java-google-cloud-platform-bom-BEAM_VERSION.pom

第三方网站 mvnrepository.com 也可用于显示此类版本信息。

希望您觉得有用。 反馈 和贡献始终受到欢迎!因此,如果您在使用这些工件时遇到任何问题,请随时创建 GitHub 问题或打开 Pull Request。