我最近将我的jackson数据绑定模块从2.11.1更新到2.12.1,在文档中我发现建议使用blackbird模块而不是加力器。但在升级后,我得到了这个错误
com.fasterxml.jackson.module.blackbird.BlackbirdModule Unable to find Java 9+ MethodHandles.privateLookupIn. Blackbird is not performing optimally! - @ ->
java.lang.NoSuchMethodException: no such method: java.lang.invoke.MethodHandles.privateLookupIn(Class,Lookup)Lookup/invokeStatic
所以我想知道是否有一种方法可以将blackbird与java8一起使用。
jackson依赖项的pom.xml条目如下所示
<jackson.version>2.12.1</jackson.version> <!-- https://github.com/FasterXML/jackson-core/blob/master/release-notes/VERSION-2.x -->
<jackson-databind.version>2.12.1</jackson-databind.version>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson-databind.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-blackbird</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>${jackson.version}</version>
</dependency>
首先,这是一条警告消息。不是错误,功能不会中断。建议Blackbird模块使用java 9+,因为Blackbird使用java 9中引入的privateLookupIn方法。
即使它与Java 8兼容,您也无法获得最佳性能,如果在Java 8环境中运行,您将收到此警告消息。
如果你想摆脱这个警告消息,你需要删除黑鸟模块并使用加力。
我发现如果你把加力罐子放在类路径中,警告就会消失。