我正尝试在我的 Android 应用程序项目中使用 Jackson。其他一切都很好,但通过 Maven 在 CI 中运行测试失败,如果我从 Eclipse 运行相同的测试,它会工作,但我没有使用 Maven POM 文件,即我没有将项目导入为 Maven 项目,而是我复制了 jackson JAR 进入 libs 文件夹。 像这样将 Jackson 依赖项添加到应用程序 POM 中:
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.12</version>
</dependency>
我从 Jenkins 得到的错误看起来像这样:
java.lang.IllegalAccessError: 预验证类中的类引用解析为意外实现
并且 Logcat 打印以下内容:
Class resolved by unexpected DEX:
LmyClass;(0x41345f78):0x190e58 ref [Lorg/codehaus/jackson/map/ObjectMapper;] Lorg/codehaus/jackson/map/ObjectMapper;(0x41345f78):0x1a08b0
(LmyClass; had used a different Lorg/codehaus/jackson/map/ObjectMapper; during pre-verification)
这是由我的代码中的以下行引起的:
ObjectMapper mapper = new ObjectMapper();
我正在运行的测试是 Android InstrumentationTestCase。
最佳答案
看起来这是一个 known issue .一种解决方案是将以下内容添加到您的依赖项中:
<scope>provided</scope>
关于Android、Maven 和 Jackson,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16234906/