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はBill of Materials (BOM)アーティファクトを提供しており、依存関係管理ツールが互換性のある組み合わせを選択するのに役立ちます。
Apache Beamをインポートする際は、Bill of Materialアーティファクトを使用することをお勧めします。プロジェクトインポートに未指定またはあいまいな依存関係が含まれている場合、BOMはSDKが正しい依存関係バージョンを使用するために必要な情報を提供します。
Apache Beamは2つの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を使用するには、MavenまたはGradleの依存関係設定にBOMをインポートします。たとえば、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 in the Maven repository.