Beam SDK for Java 依赖项

Apache Beam SDK 依赖于常见的第三方组件。这些组件导入额外的依赖项。您需要管理依赖项的原因如下:

当依赖项出现问题时,您可能会在服务中看到意外行为,包括错误,例如 NoClassDefFoundErrorNoSuchMethodErrorNoSuchFieldErrorFATAL ERROR in native method

本页介绍如何查看 SDK 使用的依赖项以及如何管理依赖项以避免出现问题。

查看依赖项

要查看依赖项,可以使用 BeamModulePlugin.groovy 文件或通过 Maven 创建新项目并解析依赖项来检索列表。

使用 BeamModulePlugin.groovy 获取依赖项

Beam 存储库中的 BeamModulePlugin.groovy 文件列出了 Beam SDK 版本的编译和运行时依赖项。

  1. 使用以下链接打开 BeamModulePlugin.groovy 文件。

    https://raw.githubusercontent.com/apache/beam/vBEAM_VERSION/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy
    

    BEAM_VERSION 替换为您使用的 SDK 版本。以下示例提供了 2.60.0 版本的依赖项:https://raw.githubusercontent.com/apache/beam/v2.60.0/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy.

  2. project.ext.library 下,查看依赖项列表。列表中的一些依赖项使用版本变量,例如 google_cloud_bigdataoss_version。这些变量在 project.ext.library 映射定义之前定义。

使用 Maven 项目解析依赖项

您可以通过 Maven 创建新项目,然后解析依赖项来检索依赖项列表。

  1. 在终端或命令行中,使用以下命令为新项目定义 Beam SDK 和 Java 版本。

    export BEAM_VERSION=2.60.0
    export JAVA_VERSION=11
    
  2. 创建项目。

    mvn archetype:generate \
        -DinteractiveMode=false \
        -DarchetypeGroupId=org.apache.beam \
        -DarchetypeArtifactId=beam-sdks-java-maven-archetypes-starter \
        -DarchetypeVersion=$BEAM_VERSION \
        -DtargetPlatform=$JAVA_VERSION \
        -DartifactId=check-pipeline-dependencies \
        -DgroupId=org.apache.beam.samples
    
  3. 更改到新项目目录。

    cd check-pipeline-dependencies
    
  4. 解析并列出依赖项。

    mvn dependency:resolve && mvn -o dependency:list
    

管理依赖项

为了简化依赖项管理,Beam 提供了 物料清单 (BOM) 工件,这些工件可以帮助依赖项管理工具选择兼容的组合。

导入 Apache Beam 时,建议使用物料清单工件。当项目导入包含未指定或不明确的依赖项时,BOM 将提供 SDK 需要使用的正确依赖项版本信息。

Apache Beam 提供两个 BOM

由于使用第三方依赖项更容易出现错误,因此建议使用 beam-sdks-java-io-google-cloud-platform-bom BOM。

导入 BOM

要使用 BOM,请将 BOM 导入您的 Maven 或 Gradle 依赖项配置中。例如,要使用 beam-sdks-java-io-google-cloud-platform-bom,请在 SDK 工件的 pom.xml 文件中进行以下更改。在以下示例中,将 BEAM_VERSION 替换为适当的 Apache Beam SDK 版本。

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 管理的依赖项

要查看由特定 BOM 管理的依赖项版本完整列表,请使用 Maven 工具 help:effective-pom,方法是运行以下命令。将 BEAM_VERSION 替换为适当的 Apache Beam SDK 版本。

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

资源