Apache Flinkをソースコードから正常にビルドするには、JDK 8以降とMaven 3.2.5の組み合わせが推奨されます。Maven 3.3.x以降では依存関係のシェーディング(Shading)処理に不具合が生じる可能性があるため、3.2.5を使用することで安定したライブラリ生成が可能になります。また、PowerMockを利用したユニットテストを正しく実行するためには、Java 8以上の環境が必須となります。
リポジトリのクローンと初期設定
公式リポジトリまたはミラーからソースコードを取得します。大規模なリポジトリをクローンする際、Gitのデフォルトバッファサイズが原因でエラーが発生する場合があります。これを回避するために、事前にポストバッファを拡張しておきます。
# GitのHTTPポストバッファを500MBに拡張
git config --global http.postBuffer 524288000
# ソースコードのクローン
git clone https://github.com/apache/flink.git flink-workspace
cd flink-workspace
Mavenリポジトリの最適化
ビルド時間を短縮し、タイムアウトによる失敗を防ぐため、Mavenのsettings.xmlにミラーリポジトリを設定します。特にflink-filesystemsモジュールが依存するMapR関連のJARファイルは容量が大きいため、専用ミラーの利用が不可欠です。
<mirrors>
<mirror>
<id>public-central</id>
<mirrorOf>*,!mapr-repo,!confluent-repo</mirrorOf>
<name>Central Mirror</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
<mirror>
<id>mapr-proxy</id>
<mirrorOf>mapr-releases</mirrorOf>
<name>MapR Releases Proxy</name>
<url>https://maven.aliyun.com/repository/mapr-public</url>
</mirror>
<mirror>
<id>confluent-proxy</id>
<mirrorOf>confluent</mirrorOf>
<name>Confluent Proxy</name>
<url>https://packages.confluent.io/maven/</url>
</mirror>
</mirrors>
ターゲットブランチの選択
開発や検証の目的に合わせて、適切なリリースブランチに切り替えます。ここでは例として、安定版のリリースブランチをチェックアウトします。
# リモートブランチの最新情報を取得
git fetch --all
# 対象のリリースブランチ(例: 1.15)に切り替え
git switch -c local-build-branch origin/release-1.15
コンパイルとビルドの実行
用途に応じてMavenのビルドコマンドを使い分けます。テストやドキュメント生成をスキップすることで、ビルド時間を大幅に短縮できます。
# 標準ビルド(テスト、Javadoc、Checkstyleを無効化)
mvn clean install -DskipTests -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true
# 高速ビルドプロファイルの適用(QAプラグインなども省略)
mvn clean install -DskipTests -Dfast
# ローカルリポジトリへのインストールを行わず、成果物のみを生成
mvn clean package -DskipTests -Dfast
# 特定のHadoopバージョンを指定してビルド
mvn clean package -DskipTests -Dhadoop.version=3.3.4
依存関係エラーのトラブルシューティング
ビルド中に特定のアーティファクト(例: flink-s3-fs-hadoop)の解決に失敗した場合、不足しているJARファイルを手動でローカルリポジトリにインストールすることで解消できます。
# 事前にダウンロードしたJARファイルをローカルMavenリポジトリに登録
mvn install:install-file \
-Dfile=/path/to/downloaded/flink-s3-fs-hadoop-custom.jar \
-DgroupId=org.apache.flink \
-DartifactId=flink-s3-fs-hadoop \
-Dversion=1.15-SNAPSHOT \
-Dpackaging=jar
ビルド成果物の確認
ビルドが正常に完了すると、flink-dist/target/ディレクトリ配下に以下の成果物が生成されます。
- 展開済みのFlinkバイナリディレクトリ(例:
flink-1.15.0/) - 配布用の圧縮アーカイブファイル(例:
flink-1.15.0-bin-scala_2.12.tgz) - Flinkのコア機能を含む実行JARファイル(例:
flink-dist_2.12-1.15.0.jar)