來源於 https://blog.csdn.net/haitianxueyuan521/article/details/81736155
問題:描述以下是在本地STS中運行Flink 出現的問題。
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/flink/runtime/state/AbstractStateBackend
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.privateGetPublicMethods(Unknown Source)
at java.lang.Class.getMethods(Unknown Source)
at sun.misc.ProxyGenerator.generateClassFile(Unknown Source)
at sun.misc.ProxyGenerator.generateProxyClass(Unknown Source)
at java.lang.reflect.Proxy$ProxyClassFactory.apply(Unknown Source)
at java.lang.reflect.Proxy$ProxyClassFactory.apply(Unknown Source)
at java.lang.reflect.WeakCache$Factory.get(Unknown Source)
at java.lang.reflect.WeakCache.get(Unknown Source)
at java.lang.reflect.Proxy.getProxyClass0(Unknown Source)
at java.lang.reflect.Proxy.getProxyClass(Unknown Source)
at org.apache.beam.sdk.options.PipelineOptionsFactory$Cache.validateWellFormed(PipelineOptionsFactory.java:1759)
at org.apache.beam.sdk.options.PipelineOptionsFactory$Cache.validateWellFormed(PipelineOptionsFactory.java:1704)
at org.apache.beam.sdk.options.PipelineOptionsFactory$Cache.register(PipelineOptionsFactory.java:1699)
at org.apache.beam.sdk.options.PipelineOptionsFactory$Cache.initializeRegistry(PipelineOptionsFactory.java:1687)
at org.apache.beam.sdk.options.PipelineOptionsFactory$Cache.<init>(PipelineOptionsFactory.java:1673)
at org.apache.beam.sdk.options.PipelineOptionsFactory$Cache.<init>(PipelineOptionsFactory.java:1638)
at org.apache.beam.sdk.options.PipelineOptionsFactory.resetCache(PipelineOptionsFactory.java:534)
java.lang.NoClassDefFoundError 和ClassNotFoundException 這兩個是不同的。
NoClassDefFoundError在這里是pom 引用的時候沒有去掉<scope>test</scope>導致
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-runtime_2.11</artifactId>
<version>1.5.2</version>
<scope>test</scope>
</dependency>
ClassNotFoundException 一般都是少java包導致
說到這里我再提一下<scope>的含義:
scope的分類
1.compile:默認值 他表示被依賴項目需要參與當前項目的編譯,還有后續的測試,運行周期也參與其中,是一個比較強的依賴。打包的時候通常需要包含進去
2.test:依賴項目僅僅參與測試相關的工作,包括測試代碼的編譯和執行,不會被打包,例如:junit
3.runtime:表示被依賴項目無需參與項目的編譯,不過后期的測試和運行周期需要其參與。與compile相比,跳過了編譯而已。例如JDBC驅動,適用運行和測試階段
4.provided:打包的時候可以不用包進去,別的設施會提供。事實上該依賴理論上可以參與編譯,測試,運行等周期。相當於compile,但是打包階段做了exclude操作
5.system:從參與度來說,和provided相同,不過被依賴項不會從maven倉庫下載,而是從本地文件系統拿。需要添加systemPath的屬性來定義路徑
————————————————
版權聲明:本文為CSDN博主「xiaosima2017」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/haitianxueyuan521/article/details/81736155
