前几天,Debezium社区的用户报告了一个有趣的问题。他们在Java 1.8上使用Debezium,结果很奇怪NoSuchMethodError:
java.lang.NoSuchMethodError: java.nio.ByteBuffer.position(I)Ljava/nio/ByteBuffer; |
NoSuchMethodError表示Java版本不匹配:一些方法在编译时存在,但却在运行时不可用。
解决办法:
应该使用--release开关代替--source/ --target。为了在基于Maven的构建中实现相同目的,只需在pom.xml中指定以下属性:
... |
从理论上讲,使用--source和时也可以达到相同的效果--target。通过该--boot-class-path选项,您可以建议编译器使用一组特定的引导程序类文件,而不是使用JDK中用于编译的文件。但这会麻烦得多,因为它要求您实际提供目标Java版本的类,而--release将利用当前使用的JDK本身附带的签名数据。