博客
2023/06/23
在 Java 中管理 Beam 依赖项
管理 Java 依赖项可能很困难,如果不正确处理,可能会导致各种问题,因为在使用特定且以前未经测试的组合时可能会出现不兼容性。
为了使该过程更容易,Beam 现在提供了 物料清单 (BOM) 工件,这些工件将帮助依赖项管理工具选择兼容的组合。
我们希望这将使您更容易使用 Apache Beam,并在升级到新版本时更容易过渡。
当引入不兼容的类和库时,代码容易出现错误,例如 NoClassDefFoundError
、NoSuchMethodError
、NoSuchFieldError
、FATAL 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.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 管理的依赖项版本的完整列表,可以使用 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。