最近在学习flink 流程序,在写demo程序的时候依赖flink依赖,依赖的包在flink集群里面是自己已经提供了的,在导入的时候配置为provided,像下面这样,以使打包的时候不用打到最终的程序包里面。
xml
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java</artifactId>
<version>${flink.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-clients</artifactId>
<version>${flink.version}</version>
<scope>provided</scope>
</dependency>
在idea里面编译调试的时候,由于maven依赖被标记为provided,依赖没有自动导入,需要在idea中 做一下配置,在执行的时候idea才会自动帮忙导入。否则会报如下错误。
powershell
java.lang.NoClassDefFoundError: org/apache/flink/api/common/functions/FlatMapFunction
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
at java.lang.Class.getMethod0(Class.java:3018)
at java.lang.Class.getMethod(Class.java:1784)
at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: org.apache.flink.api.common.functions.FlatMapFunction
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 7 more
按项目配置
按项目配置,只在配置的项目上起作用。
配置步骤如下截图:
默认配置
如果希望所有项目maven依赖依赖类型为provided的时候,idea都帮忙自动导入,配置默认自动导入provided依赖即可,配置步骤如下图。