部落格
2023/06/23
在 Java 中管理 Beam 相依性
管理您的 Java 相依性可能具有挑戰性,如果沒有正確執行,可能會導致各種問題,因為當使用特定且先前未測試的組合時,可能會出現不相容的情況。
為了簡化該過程,Beam 現在提供了 物料清單 (BOM) 成品,這將幫助相依性管理工具選擇相容的組合。
我們希望這能讓您更輕鬆地使用 Apache Beam,並在升級到較新版本時有更簡單的轉換。
當引入不相容的類別和程式庫時,程式碼容易發生錯誤,例如 NoClassDefFoundError
、NoSuchMethodError
、NoSuchFieldError
、FATAL 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.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
第三方網站 mvnrepository.com 也可用於顯示此類版本資訊。
我們希望您覺得這很有用。意見回饋和貢獻總是受到歡迎!因此,如果您在使用這些成品時遇到任何問題,請隨時建立 GitHub 問題或開啟提取請求。