Java 的 Beam SDK 相依性
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 提供材料清單 (BOM)成品,有助於相依性管理工具選取相容的組合。
當您匯入 Apache Beam 時,建議使用材料清單成品。當專案匯入包含未指定或不明確的相依性時,BOM 會提供 SDK 使用正確相依性版本所需的資訊。
Apache Beam 提供兩個 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,請將 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.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