Using Maven
This documentation is for an unreleased version of Apache Flink. We recommend you use the latest stable version.

Mavenを使ってプロジェクトを設定する方法 #

このガイドでは、Mavenを使ってFlinkジョブプロジェクトを設定する方法を示します。MavenはApache Software Foundationによって開発されたオープンソースのビルド自動化ツールで、プロジェクトのビルド、公開、デプロイを可能にします。これを使って、ソフトウェアプロジェクトのライフサイクル全体を管理できます。

必要条件 #

  • Maven 3.8.6 (recommended or higher)
  • Java 8 (非推奨) または Java 11

プロジェクトをIDEにインポートする #

プロジェクトフォルダとファイルが作成されている場合は、開発とテストのためにこのプロジェクトをIDEにインポートすることをお勧めします。

IntelliJ IDEAは、そのままでMavenプロジェクトをサポートします。Eclipseはimport Maven projectsするためにm2e pluginを提供します。

注意: JavaのデフォルトのJVMヒープサイズはFlinkには小さすぎる可能性があるため、手動で増やす必要があります。 Eclipseでは、Run Configurations -> Argumentsを選択し、VM Argumentsボックスに-Xmx800mと書き込みます。 IntelliJ IDEAでJVMオプションを変更する推奨方法は、Help | Edit Custom VM Optionsメニューからです。 詳細は、この記事を参照してください。

IntelliJでの注意: IntelliJ IDEA内でアプリケーションを実行するには、実行構成でInclude dependencies with "Provided" scopeボックスにチェックを入れる必要があります。このオプションが利用できない場合(古いバージョンのIntelliJ IDEAを使っている可能性があります)、回避策はアプリケーションのmain()メソッドを呼び出すテストを作成することです。

プロジェクトのビルド #

プロジェクトをビルド/パッケージ化する場合、プロジェクトディレクトリに移動して’mvn clean package‘コマンドを実行します。アプリケーション(およびアプリケーションへの依存関係として追加したコネクタとライブラリ)を含むJARファイルは、target/<artifact-id>-<version>.jarにあります。。

注意: アプリケーションのメインクラス/エントリポイントとしてDataStreamJobとは異なるクラスを使った場合、pom.xmlファイルのmainClass設定を適宜変更して、メインクラスを追加指定せずにFlinkがJARファイルからアプリケーションを実行できるようにすることをお勧めします。

プロジェクトへの依存関係の追加 #

プロジェクトディレクトリのpom.xmlファイルを開き、dependenciesタブの間に依存関係を追加します。

例えば、次のようにKafkaコネクタを依存関係として追加できます:

<dependencies>
    
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-connector-kafka</artifactId>
        <version>1.19-SNAPSHOT</version>
    </dependency>
    
</dependencies>

次に、コマンドラインでmvn installを実行します。

Java Project TemplateScala Project Template、またはGradleから作成されたプロジェクトはmvn clean packageの実行時にアプリケーションの依存関係がアプリケーションJARに自動的に組み込まれるように設定されています。 これらのテンプレートからセットアップされていないプロジェクトの場合は、Maven Shade Pluginを追加して、必要な依存関係を全て備えたアプリケーションをビルドすることをお勧めします。

重要: これらのコアAPI依存関係は全てスコープがprovidedに設定されている必要があることに注意してください。これは、それらをコンパイルする必要があるが、プロジェクトの結果として得られるアプリケーションJARファイルにパッケージ化すべきではないことを意味します。providedに設定されていない場合、最良のシナリオでは結果として生成されるJARは極端に大きくなります。JARに全てのFlinkコア依存関係も含まれるためです。最悪のシナリオは、アプリケーションのJARに追加されたFlinkコアの依存関係が、独自の依存関係バージョンの一部と衝突することです(これは通常逆クラスローディングによって回避されます)。

依存関係をアプリケーションJARに正しくパッケージ化するには、Flink APIの依存関係がcompileスコープに設定されている必要があります。

アプリケーションのパッケージ化 #

ユースケースによっては、FlinkアプリケーションをFlink環境にデプロイする前に、様々な方法でパッケージ化する必要がある場合があります。

FlinkジョブのJARを作成し、サードパーティの依存関係を使わずにFlinkの依存関係のみを使う場合(つまり、JSON形式のファイルシステムコネクタを使う場合)、uber/fat JARを作成したり、依存関係をシェーディングしたりする必要はありません。

FlinkジョブのJARを作成し、Flinkディストリビューションに組み込まれていない外部依存関係を使う場合は、それらをディストリビューションのクラスパスに追加するか、uber/fatアプリケーションJARにシャーディングします。

生成されたuber/fat JARを使って、次のようにローカルまたはリモートクラスタに送信できます:

bin/flink run -c org.example.MyJob myFatJar.jar

Flinkジョブをデプロイする方法の詳細については、デプロイメントガイドをご覧ください。

依存関係を持つuber/fat JARを作成するためのテンプレート #

宣言されたコネクタとライブラリに必要とされる全ての依存関係を含むアプリケーションJARをビルドするには、次のシェーディングプラグイン定義を使えます:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.1.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <artifactSet>
                            <excludes>
                                <exclude>com.google.code.findbugs:jsr305</exclude>
                            </excludes>
                        </artifactSet>
                        <filters>
                            <filter>
                                <!-- Do not copy the signatures in the META-INF folder.
                                Otherwise, this might cause SecurityExceptions when using the JAR. -->
                                <artifact>*:*</artifact>
                                <excludes>
                                    <exclude>META-INF/*.SF</exclude>
                                    <exclude>META-INF/*.DSA</exclude>
                                    <exclude>META-INF/*.RSA</exclude>
                                </excludes>
                            </filter>
                        </filters>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <!-- Replace this with the main class of your job -->
                                <mainClass>my.programs.main.clazz</mainClass>
                            </transformer>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Maven shade pluginはデフォルトで"runtime"と"compile"スコープの全ての依存関係を含みます。

inserted by FC2 system