当前位置: 首页 > 面试题库 >

为什么在尝试启动码头时,lambda表达式会破坏guice错误处理?

司徒经纶
2023-03-14
问题内容

我在尝试启动码头时遇到以下问题,我得到以下证明:

Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.17:test failed: There was an error in the forked process
[ERROR] org.apache.maven.surefire.testset.TestSetFailedException: java.lang.RuntimeException: com.google.inject.internal.util.$ComputationException: java.lang.ArrayIndexOutOfBoundsException: 51966
[ERROR] at org.apache.maven.surefire.common.junit4.JUnit4RunListener.rethrowAnyTestMechanismFailures(JUnit4RunListener.java:206)
[ERROR] at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.createRequestAndRun(JUnitCoreWrapper.java:114)
[ERROR] at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.executeEager(JUnitCoreWrapper.java:85)
[ERROR] at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:54)
[ERROR] at org.apache.maven.surefire.junitcore.JUnitCoreProvider.invoke(JUnitCoreProvider.java:134)
[ERROR] at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
[ERROR] at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
[ERROR] at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[ERROR] Caused by: java.lang.RuntimeException: com.google.inject.internal.util.$ComputationException: java.lang.ArrayIndexOutOfBoundsException: 51966
[ERROR] at org.apache.maven.surefire.junitcore.TestSet.replay(TestSet.java:100)
[ERROR] at org.apache.maven.surefire.junitcore.ConcurrentRunListener.testSetCompleted(ConcurrentRunListener.java:82)
[ERROR] at org.apache.maven.surefire.junitcore.JUnitCoreRunListener.testRunFinished(JUnitCoreRunListener.java:73)
[ERROR] at org.junit.runner.notification.RunNotifier$2.notifyListener(RunNotifier.java:95)
[ERROR] at org.junit.runner.notification.RunNotifier$SafeNotifier.run(RunNotifier.java:61)
[ERROR] at org.junit.runner.notification.RunNotifier.fireTestRunFinished(RunNotifier.java:92)
[ERROR] at org.junit.runner.JUnitCore.run(JUnitCore.java:161)
[ERROR] at org.junit.runner.JUnitCore.run(JUnitCore.java:138)
[ERROR] at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.createRequestAndRun(JUnitCoreWrapper.java:113)
[ERROR] ... 6 more
[ERROR] Caused by: com.google.inject.internal.util.$ComputationException: java.lang.ArrayIndexOutOfBoundsException: 51966
[ERROR] at com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:553)
[ERROR] at com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:419)
[ERROR] at com.google.inject.internal.util.$CustomConcurrentHashMap$ComputingImpl.get(CustomConcurrentHashMap.java:2041)
[ERROR] at com.google.inject.internal.util.$StackTraceElements.forMember(StackTraceElements.java:53)
[ERROR] at com.google.inject.internal.Errors.formatInjectionPoint(Errors.java:716)
[ERROR] at com.google.inject.internal.Errors.formatSource(Errors.java:678)
[ERROR] at com.google.inject.internal.Errors.format(Errors.java:555)
[ERROR] at com.google.inject.CreationException.getMessage(CreationException.java:48)
[ERROR] at java.lang.Throwable.getLocalizedMessage(Throwable.java:391)
[ERROR] at java.lang.Throwable.toString(Throwable.java:480)
[ERROR] at java.lang.String.valueOf(String.java:2979)
[ERROR] at java.io.PrintWriter.println(PrintWriter.java:754)
[ERROR] at java.lang.Throwable$WrappedPrintWriter.println(Throwable.java:764)
[ERROR] at java.lang.Throwable.printStackTrace(Throwable.java:655)
[ERROR] at java.lang.Throwable.printStackTrace(Throwable.java:721)
[ERROR] at org.junit.runner.notification.Failure.getTrace(Failure.java:71)
[ERROR] at org.apache.maven.surefire.common.junit4.JUnit4StackTraceWriter.writeTraceToString(JUnit4StackTraceWriter.java:57)
[ERROR] at org.apache.maven.surefire.booter.ForkingRunListener.encode(ForkingRunListener.java:330)
[ERROR] at org.apache.maven.surefire.booter.ForkingRunListener.encode(ForkingRunListener.java:312)
[ERROR] at org.apache.maven.surefire.booter.ForkingRunListener.toString(ForkingRunListener.java:258)
[ERROR] at org.apache.maven.surefire.booter.ForkingRunListener.testError(ForkingRunListener.java:132)
[ERROR] at org.apache.maven.surefire.junitcore.TestMethod.replay(TestMethod.java:118)
[ERROR] at org.apache.maven.surefire.junitcore.TestSet.replay(TestSet.java:87)
[ERROR] ... 14 more
[ERROR] Caused by: java.lang.ArrayIndexOutOfBoundsException: 51966
[ERROR] at com.google.inject.internal.asm.$ClassReader.readUTF8(Unknown Source)
[ERROR] at com.google.inject.internal.asm.$ClassReader.readClass(Unknown Source)
[ERROR] at com.google.inject.internal.asm.$ClassReader.accept(Unknown Source)
[ERROR] at com.google.inject.internal.asm.$ClassReader.accept(Unknown Source)
[ERROR] at com.google.inject.internal.util.$LineNumbers.<init>(LineNumbers.java:62)
[ERROR] at com.google.inject.internal.util.$StackTraceElements$1.apply(StackTraceElements.java:36)
[ERROR] at com.google.inject.internal.util.$StackTraceElements$1.apply(StackTraceElements.java:33)
[ERROR] at com.google.inject.internal.util.$MapMaker$StrategyImpl.compute(MapMaker.java:549)
[ERROR] ... 36 more

从我阅读的内容来看,问题似乎是lambda打破了guice错误处理,但仍然人们没有提出解决方案。如果有人知道这是关于什么的,请发表评论!


问题答案:

当您的一个guice模块中的配置错误并且使用的是Java 8 lambda和guice 3时,会发生此无法读取的异常。

我在这个问题上花了很多时间。每次,我都通过升级到guice
4
beta 解决了这个问题。其功能之一是:

更好的Java8运行时兼容性

如果使用maven:

<dependency>
  <groupId>com.google.inject</groupId>
  <artifactId>guice</artifactId>
  <version>4.0-beta5</version>
</dependency>

此新版本将为您提供清晰的错误消息和正确的堆栈跟踪,以使您发现问题。解决问题后,您可以切换回guice 3.0或继续使用4.0-beta(从我所见-
已经稳定)。

编辑了2016/07/13

请注意,guice 4.0和4.1已发布。因此,您应该使用最新版本:

<dependency>
  <groupId>com.google.inject</groupId>
  <artifactId>guice</artifactId>
  <version>4.1.0</version>
</dependency>


 类似资料:
  • 我已经从各种“git”镜像中检查出了当前的树尖,如这里的入门页面所述:http://llvm.org/docs/GettingStarted.html 然后,我按照指令使用C的生成的使文件,像这样:c做-G'Unix Makefile' /Path/To/LLVM-Repository 此配置失败,出现以下错误-发生了什么问题? CMake错误位于tools/clang/CMakeLists。tx

  • 我正在处理一个Spring批处理应用程序,该应用程序包含两个不同的作业bean(表示两个不同的作业)。这两项工作都必须由我的应用程序执行(目前,它可以顺序和并行地完成。目前它不是那么重要)。 我会试着解释我的情况和遇到的问题是什么: 首先,我有一个配置类,其中声明了我的两个作业对象(以及相关步骤): 然后,在第一时间,我创建了另一个SpringBatchExampleJobLauncher启动器类

  • 本文向大家介绍python 什么是lambda表达式?它有什么好处?相关面试题,主要包含被问及python 什么是lambda表达式?它有什么好处?时的应答技巧和注意事项,需要的朋友参考一下 简单来说,lambda表达式通常是当你需要使用一个函数,但是又不想费脑命名一个函数的时候使用,也就是通常所说的匿名函数

  • 我知道使用lambda expression(LE)我们可以节省一些代码行,比如为函数接口创建对象。而且LE将更易读。但我确信这并不是提供该功能的主要原因。我在google上搜索,并在本文中找到了这段有趣的引用 在Java8之前,处理任何集合的元素都可以通过从集合中获取迭代器,然后迭代元素,然后处理每个元素来完成。如果需要并行处理这些元素,那么将由客户端代码完成。随着Java 8中Stream A

  • 所以浮点运算是不精确的,但这并不能完全解释这里发生的事情:

  • 我现在正在学习如何使用lambda表达式,我已经看到了一些带有简单示例的教程: 但是我的编译器显示这个错误: 我是不是忘了什么?