Java 为什么运行示例flink应用程序会抛出此错误?

Java 为什么运行示例flink应用程序会抛出此错误?,java,linux,apache-flink,flink-streaming,Java,Linux,Apache Flink,Flink Streaming,我正在尝试运行中描述的演示应用程序 我使用给定的脚本生成了项目: curl https://flink.apache.org/q/quickstart.sh | bash -s 1.10.0 并采用以下材料建造: mvn clean package 但当我尝试跑步时: java -jar targets/java -jar quickstart-0.1.jar 我得到以下错误: Exception in thread "main" java.lang.NoClassDefFoundErro

我正在尝试运行中描述的演示应用程序

我使用给定的脚本生成了项目:

curl https://flink.apache.org/q/quickstart.sh | bash -s 1.10.0
并采用以下材料建造:

mvn clean package
但当我尝试跑步时:

java -jar targets/java -jar quickstart-0.1.jar
我得到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/flink/streaming/api/environment/StreamExecutionEnvironment
        at org.myorg.quickstart.StreamingJob.main(StreamingJob.java:39)
Caused by: java.lang.ClassNotFoundException: org.apache.flink.streaming.api.environment.StreamExecutionEnvironment
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
        ... 1 more

我在另一个文件夹中找到了flink,并运行了bin/start_cluster.sh。我还能够毫无问题地运行预打包的flink应用程序(in/bin)。

默认情况下,由quickstarts脚本生成的
pom.xml
将不包括flink的依赖项,这些依赖项是通过
java-jar…
直接运行jar所必需的。为了以这种方式运行jar,您需要构建一个uber jar,其中包含所有必需的Flink依赖项。您可以通过激活配置文件为IDEA添加依赖项来执行此操作:

mvn clean package -Padd-dependencies-for-IDEA
或者通过将Flink依赖项的范围从
提供的
更改为
编译


默认情况下不包括Flink的依赖项的原因是,当您向Flink群集提交作业时,该群集已包含这些依赖项。因此,通过将依赖项设置为
pom.xml
中提供的依赖项,可以使生成的用户jar的大小保持较小,这相当于不将它们包括在jar中,quickstarts脚本生成的
pom.xml
将不包括Flink的依赖项,这些依赖项是通过
java-jar…
直接运行jar所必需的。为了以这种方式运行jar,您需要构建一个uber jar,其中包含所有必需的Flink依赖项。您可以通过激活配置文件为IDEA添加依赖项来执行此操作:

mvn clean package -Padd-dependencies-for-IDEA
或者通过将Flink依赖项的范围从
提供的
更改为
编译

默认情况下不包括Flink的依赖项的原因是,当您向Flink群集提交作业时,该群集已包含这些依赖项。因此,通过将依赖项设置为
pom.xml
中提供的依赖项,可以使生成的用户jar的大小保持较小,这相当于不将它们包含在jar中