Jackson 无法在 Android 上加载 JDK7 类型
Jackson unable to load JDK7 types on Android
我在 Android 应用程序中使用 Jackson 2.8.2 反序列化 JSON。反序列化本身有效,但是,我可以在应用程序日志中看到以下警告:
Unable to load JDK7 types (annotations, java.nio.file.Path): no Java7 support added
Proguard 已禁用,sourceCompatibility
设置为 '1.7'
。如何将这些看似缺失的类型添加到我的构建中?
首先,您的 sourceCompatibility
设置 1.7
与运行时环境没有任何关系,因此它不会影响此消息。
这纯粹是一个“在 Jackson 初始化这个 class 时这些 class 是否存在”问题——他们确实 not 存在于某种组合中。也许没关系,如果您不使用 Java 7 java.nio.file.Path
class 那么您应该不会遇到此记录的 warning 消息。因为这就是这个警告的意思,Jackson 支持 serialization/deserialization 这个特定的 class。
查看 Android java.nio.*
packages,它没有 java.nio.file.*
包 any API 级别。这样就解释了为什么您会看到警告消息。而且由于您无论如何都不能使用 java.nio.file.Path
,所以除了烦人的日志消息之外,这甚至不是真正的问题。
如果此消息令人厌烦,您始终可以将记录器 com.fasterxml.jackson.databind.ext.Java7Support
的 Java Util 日志记录级别设置为级别 ERROR
。然后您将不会再看到这些 警告 消息。
有关记录消息的更多信息:
在 Jackson 2.8.x 中,对 Java 7 class java.nio.file.Path
的支持都是从同一个 JAR 文件加载的,并且是内置的。一个 class 动态检查另一个是否可以正确加载:
Class<?> cls = Class.forName("com.fasterxml.jackson.databind.ext.Java7SupportImpl");
如果有什么东西从最后一组 class 中剥离了这个 class,这可能会失败的唯一方法。或者运行时缺少它所依赖的 classes 之一:
import java.beans.ConstructorProperties;
import java.beans.Transient;
import java.nio.file.Path;
如果缺少其中任何一个,您将看到记录的错误消息。所以其中一个是正确的:
- JDK 7 class 中的一个或多个在运行时丢失
com.fasterxml.jackson.databind.ext.Java7SupportImpl
在运行时缺失
这些原因都不是 Jackson 的错,它们与您的运行时环境有关(即它们不存在于 Android API 中),或者 Proguard 剥离 class es 它认为没有被使用。
另请参阅:
- Android import java.nio.file.Files; cannot be resolved
- How to use java.nio.file package in android?
- Android java.nio packages
我在 Android 应用程序中使用 Jackson 2.8.2 反序列化 JSON。反序列化本身有效,但是,我可以在应用程序日志中看到以下警告:
Unable to load JDK7 types (annotations, java.nio.file.Path): no Java7 support added
Proguard 已禁用,sourceCompatibility
设置为 '1.7'
。如何将这些看似缺失的类型添加到我的构建中?
首先,您的 sourceCompatibility
设置 1.7
与运行时环境没有任何关系,因此它不会影响此消息。
这纯粹是一个“在 Jackson 初始化这个 class 时这些 class 是否存在”问题——他们确实 not 存在于某种组合中。也许没关系,如果您不使用 Java 7 java.nio.file.Path
class 那么您应该不会遇到此记录的 warning 消息。因为这就是这个警告的意思,Jackson 支持 serialization/deserialization 这个特定的 class。
查看 Android java.nio.*
packages,它没有 java.nio.file.*
包 any API 级别。这样就解释了为什么您会看到警告消息。而且由于您无论如何都不能使用 java.nio.file.Path
,所以除了烦人的日志消息之外,这甚至不是真正的问题。
如果此消息令人厌烦,您始终可以将记录器 com.fasterxml.jackson.databind.ext.Java7Support
的 Java Util 日志记录级别设置为级别 ERROR
。然后您将不会再看到这些 警告 消息。
有关记录消息的更多信息:
在 Jackson 2.8.x 中,对 Java 7 class java.nio.file.Path
的支持都是从同一个 JAR 文件加载的,并且是内置的。一个 class 动态检查另一个是否可以正确加载:
Class<?> cls = Class.forName("com.fasterxml.jackson.databind.ext.Java7SupportImpl");
如果有什么东西从最后一组 class 中剥离了这个 class,这可能会失败的唯一方法。或者运行时缺少它所依赖的 classes 之一:
import java.beans.ConstructorProperties;
import java.beans.Transient;
import java.nio.file.Path;
如果缺少其中任何一个,您将看到记录的错误消息。所以其中一个是正确的:
- JDK 7 class 中的一个或多个在运行时丢失
com.fasterxml.jackson.databind.ext.Java7SupportImpl
在运行时缺失
这些原因都不是 Jackson 的错,它们与您的运行时环境有关(即它们不存在于 Android API 中),或者 Proguard 剥离 class es 它认为没有被使用。
另请参阅:
- Android import java.nio.file.Files; cannot be resolved
- How to use java.nio.file package in android?
- Android java.nio packages