对于我的
Android项目,我设置了Gradle with
Jackson 2.2.x如下:
// build.gradle buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.6.+' } } apply plugin: 'android' repositories { mavenCentral() } android { compileSdkVersion 18 buildToolsversion "18.1.0" defaultConfig { minSdkVersion 8 targetSdkVersion 18 } } dependencies { compile 'com.android.support:appcompat-v7:18.0.0' compile 'com.android.support:support-v4:18.0.0' compile 'com.google.android.gms:play-services:3.1.36' compile 'com.fasterxml.jackson.core:jackson-databind:2.2.+' compile 'com.fasterxml.jackson.core:jackson-core:2.2.+' compile 'com.fasterxml.jackson.core:jackson-annotations:2.2.+' }
我只是在这里使用ObjectMapper:
import com.fasterxml.jackson.databind.ObjectMapper; // ... ObjectMapper objectMapper = new ObjectMapper(); try { Content content = objectMapper.readValue(inputStream,Content.class); } catch (IOException e) { e.printstacktrace(); }
当我运行gradle installDebug并启动应用程序的相关部分崩溃:
java.lang.NoClassDefFoundError: com.fasterxml.jackson.databind.ObjectMapper
思考:
>我注意到,在build.gradle中定义了com.fasterxml.jackson.core的错误消息中提到了com.fasterxml.jackson ….有不匹配导致问题吗?
>我把这个依赖关系块暂时移动到android块中,因为我found other build.gradle
configurations这样结构化了.不过似乎没有什么区别.
解决方法
Gradle和Android并不总是很好地依赖关系(还).运行
gradle clean
似乎为我解决了大多数问题.
注意:如果不行,可以运行
dexdump classes.dex | grep 'Class descriptor'
在APK中的classes.dex文件中.这将检查类是否包含在classes.dex文件中. (有时,如果您想要仔细检查发生的情况,这很有用).