在 Java 中管理 Beam 相依性

管理您的 Java 相依性可能具有挑戰性,如果沒有正確執行,可能會導致各種問題,因為當使用特定且先前未測試的組合時,可能會出現不相容的情況。

為了簡化該過程,Beam 現在提供了 物料清單 (BOM) 成品,這將幫助相依性管理工具選擇相容的組合。

我們希望這能讓您更輕鬆地使用 Apache Beam,並在升級到較新版本時有更簡單的轉換。

當引入不相容的類別和程式庫時,程式碼容易發生錯誤,例如 NoClassDefFoundErrorNoSuchMethodErrorNoSuchFieldErrorFATAL 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.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 管理的相依性版本的完整清單,可以使用 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 問題或開啟提取請求。