ブログ
2023/06/23
JavaにおけるBeamの依存関係の管理
Javaの依存関係の管理は困難な場合があります。正しく行わないと、特定の、以前にテストされていない組み合わせを使用した場合に非互換性が発生し、さまざまな問題が発生する可能性があります。
このプロセスを容易にするために、Beamは、依存関係管理ツールが互換性のある組み合わせを選択するのに役立つ部品表(BOM)アーティファクトを提供するようになりました。
これにより、Apache Beamの使用が容易になり、新しいバージョンへのアップグレード時の移行が簡素化されることを願っています。
互換性のないクラスやライブラリを使用すると、コードはNoClassDefFoundError
、NoSuchMethodError
、NoSuchFieldError
、FATAL ERROR in native method
などのエラーを起こしやすくなります。
Apache Beamをインポートする場合、推奨される方法は、部品表(BOM)を使用することです。BOMの仕組みは、依存関係管理解決ツールにヒントを提供することです。そのため、プロジェクトが未指定またはあいまいな依存関係をインポートする場合、使用するバージョンがわかります。
現在、Beamによって提供されているBOMは2つあります。
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
サードパーティのWebサイトmvnrepository.comを使用して、そのようなバージョン情報を表示することもできます。
これがお役に立てば幸いです。フィードバックと貢献はいつでも歓迎します!これらのアーティファクトの使用中に問題が発生した場合は、GitHubのissueを作成するか、プルリクエストを開いてください。