Beam SDK for Java 依赖项
Apache Beam SDK 依赖于常见的第三方组件。这些组件导入额外的依赖项。您需要管理依赖项的原因如下:
- 依赖项可能存在版本冲突或不兼容的类和库。
- 某些库不向前兼容。当您在代码中使用这些包时,您可能需要锁定到适当的版本,以便在运行管道时使用这些版本。
当依赖项出现问题时,您可能会在服务中看到意外行为,包括错误,例如 NoClassDefFoundError
、NoSuchMethodError
、NoSuchFieldError
或 FATAL ERROR in native method
。
本页介绍如何查看 SDK 使用的依赖项以及如何管理依赖项以避免出现问题。
查看依赖项
要查看依赖项,可以使用 BeamModulePlugin.groovy
文件或通过 Maven 创建新项目并解析依赖项来检索列表。
使用 BeamModulePlugin.groovy 获取依赖项
Beam 存储库中的 BeamModulePlugin.groovy
文件列出了 Beam SDK 版本的编译和运行时依赖项。
使用以下链接打开
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.
在
project.ext.library
下,查看依赖项列表。列表中的一些依赖项使用版本变量,例如google_cloud_bigdataoss_version
。这些变量在project.ext.library
映射定义之前定义。
使用 Maven 项目解析依赖项
您可以通过 Maven 创建新项目,然后解析依赖项来检索依赖项列表。
在终端或命令行中,使用以下命令为新项目定义 Beam SDK 和 Java 版本。
export BEAM_VERSION=2.60.0 export JAVA_VERSION=11
创建项目。
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
更改到新项目目录。
cd check-pipeline-dependencies
解析并列出依赖项。
mvn dependency:resolve && mvn -o dependency:list
管理依赖项
为了简化依赖项管理,Beam 提供了 物料清单 (BOM) 工件,这些工件可以帮助依赖项管理工具选择兼容的组合。
导入 Apache Beam 时,建议使用物料清单工件。当项目导入包含未指定或不明确的依赖项时,BOM 将提供 SDK 需要使用的正确依赖项版本信息。
Apache Beam 提供两个 BOM
beam-sdks-java-bom
:管理 Apache Beam 依赖项,这使您只需指定一次版本beam-sdks-java-io-google-cloud-platform-bom
:管理 Apache Beam、Google Cloud 和第三方依赖项
由于使用第三方依赖项更容易出现错误,因此建议使用 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.beam
、io.grpc
和 com.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
资源
- Beam SDKs Java Google Cloud Platform BOM 在 Maven 存储库中。