Java 的 Beam SDK 相依性

Apache Beam SDK 仰賴常見的第三方元件。這些元件會匯入額外的相依性。您需要管理相依性的原因如下:

當相依性發生問題時,您可能會在服務中看到非預期的行為,包括像是 NoClassDefFoundErrorNoSuchMethodErrorNoSuchFieldErrorFATAL 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 提供材料清單 (BOM)成品,有助於相依性管理工具選取相容的組合。

當您匯入 Apache Beam 時,建議使用材料清單成品。當專案匯入包含未指定或不明確的相依性時,BOM 會提供 SDK 使用正確相依性版本所需的資訊。

Apache Beam 提供兩個 BOM

因為當您使用第三方相依性時,更有可能發生錯誤,因此建議使用 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.beamio.grpccom.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

資源