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のバージョンのコンパイル時および実行時依存関係がリストされています。

  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はBill of Materials (BOM)アーティファクトを提供しており、依存関係管理ツールが互換性のある組み合わせを選択するのに役立ちます。

Apache Beamをインポートする際は、Bill of Materialアーティファクトを使用することをお勧めします。プロジェクトインポートに未指定またはあいまいな依存関係が含まれている場合、BOMはSDKが正しい依存関係バージョンを使用するために必要な情報を提供します。

Apache Beamは2つのBOMを提供します。

サードパーティの依存関係を使用する際にエラーが発生する可能性が高いため、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

リソース