升级到Java 8会导致unittest java.io.IOException中的orika映射器:无效的常量类型:142处为15

时间:2018-08-16 00:13:46

标签: java java-8 orika

我有一个项目,希望将Java 1.7的版本更新为Java 1.8,但是运行UnitTests时所有映射器测试均失败。

该项目正在使用: SpringJUnit4ClassRunner

<div>
<ul>
<li>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse in pretium mauris. Aliquam ultrices ipsum sit amet auctor porta. Donec et metus quis dolor dignissim euismod non a sem. Sed accumsan risus quis ipsum pellentesque, quis dictum metus porttitor.</li>
<li>Etiam et interdum ipsum, quis venenatis augue. Sed euismod, sem eget tristique molestie, arcu massa scelerisque nunc, eget scelerisque elit sem vitae nulla.</li>
<li>Nulla id</li>
<li>Nam ut</li>
</ul>
</div>

对于那部分例外:<dependency> <groupId>ma.glasnost.orika</groupId> <artifactId>orika-core</artifactId> <version>1.4.5</version> </dependency> 我发现了这个SO帖子: Reflections - Java 8 - invalid constant type
但是我不确定这是否真的是问题,因为我不依赖于“ javassist”。

这与同一个问题有关吗? 我该如何克服?

更完整的StackTrace:

nested exception is ma.glasnost.orika.MappingException: java.lang.RuntimeException: java.io.IOException: invalid constant type: 15 at 142

1 个答案:

答案 0 :(得分:3)

您的想法朝着正确的方向前进。

java.lang.RuntimeException: java.io.IOException: invalid constant type: 15 at 142 显示应用程序存在Java 8问题-如您的链接所述。

ma.glasnost.orika映射器取决于javassist,如您在堆栈跟踪中所见。 这是orika的传递依赖。

您可以使用mvn dependency:tree -verbose来构建依赖关系树。 在那里,您可以查找依赖于Javassist的库以及确切的版本。

要使用与Java 8兼容的Javassist版本,请使用该依赖关系覆盖orika的隐式依赖关系:

  <dependency>
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.18.2-GA</version>
  </dependency>

但是对于这个示例,最好将orika版本升级到1.4.6,因为该版本已支持Java 8。