バイナリ配布は、配布プログラムのクラスパスへ自動的に配布されるlib
フォルダ内にjarパッケージを含みます。ほとんど全てのFlinkクラスは、例えばストリーミングコネクタといくつかの新しく追加されたモジュールの2,3の例外を除いてそこにあります。これらのモジュールに依存するコードを実行するには、実行時にそれらにアクセス可能にする必要があります。以下の二つのオプションはそれらを示唆します:
lib
フォルダにコピーする。この後でタスクマネージャーを再起動する必要があることに注意してください。後者のバージョンはFlinkでのクラスローダーの管理を尊重するため、お勧めです。
Flinkによって含まれないこれらの依存を提供するために、Mavenを使った二つのオプションを提案します。
Using the latter approach in order to bundle the Kafka connector, flink-connector-kafka
you would need to add the classes from both the connector and the Kafka API itself. プラグインのセクションに以下を追加します:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.9</version>
<executions>
<execution>
<id>unpack</id>
<!-- executed just before the package phase -->
<phase>prepare-package</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<!-- For Flink connector classes -->
<artifactItem>
<groupId>org.apache.flink</groupId>
<artifactId>flink-connector-kafka</artifactId>
<version>1.5-SNAPSHOT</version>
<type>jar</type>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
<includes>org/apache/flink/**</includes>
</artifactItem>
<!-- For Kafka API classes -->
<artifactItem>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_<YOUR_SCALA_VERSION></artifactId>
<version><YOUR_KAFKA_VERSION></version>
<type>jar</type>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
<includes>kafka/**</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
これで、mvn clean package
を実行する時に、生成されたjarは必要とする依存を含みます。