关于maven中执行类遇到的java.lang.NoClassDefFoundError的问题
昨天有个同事问我,在Flink某个包中加了一个类用来进行测试,结果运行就会报如下错误
1 | Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/flink/api/common/serialization/DeserializationSchema |
排查后怀疑是pom中该jar的依赖scope是provided导致的,测试删除后就解决了。
1 | <dependency> |
但是觉得这样会很麻烦,所有其他用到的类都需要去除provided了?顺手Google了一下,Stack Overflow上有人问过同样的问题(这个人竟然是之前blink meetup上的flink+zeppelin的演讲者章剑锋(简锋))
简单的说是因为provided的scope只在编译期和test期间有效,所以正确的姿势应该是测试类就放在测试包下面测试,这样provided的包依然是有效的