Play Framework 隐藏了初始异常

Play Framework is hiding the intial exception

我在实施控制器后从 Play 收到此错误。如果我抛出一个 try 来捕获错误并 println 错误,我可以看到我的代码抛出了什么异常,但否则这个信息就会丢失,我会得到一个与 SBT 中的文件相关的错误。

在处理导致此其他异常的我的异常期间发生了什么?

我 运行 我的申请 sbt api/run

[info] p.c.s.AkkaHttpServer - Listening for HTTP on /[0:0:0:0:0:0:0:0]:9000

(Server started, use Enter to stop and go back to the console...)

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.inject.internal.cglib.core.$ReflectUtils (file:/Users/dan/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/google/inject/guice/4.2.3/guice-4.2.3.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of com.google.inject.internal.cglib.core.$ReflectUtils
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
2020-10-15 00:55:32 INFO  play.api.http.EnabledFilters  Enabled Filters (see <https://www.playframework.com/documentation/latest/Filters>):

    play.filters.csrf.CSRFFilter
    play.filters.headers.SecurityHeadersFilter
    play.filters.hosts.AllowedHostsFilter
    play.filters.cors.CORSFilter

2020-10-15 00:55:32 INFO  play.api.Play  Application started (Dev) (no global state)
2020-10-15 00:55:32 ERROR p.api.http.DefaultHttpErrorHandler  Error while handling error
java.lang.ClassCastException: class xsbti.BasicVirtualFileRef cannot be cast to class java.io.File (xsbti.BasicVirtualFileRef is in unnamed module of loader sbt.internal.MetaBuildLoader @6e75aa0d; java.io.File is in module java.base of loader 'bootstrap')
    at play.sbt.run.PlayReload$.$anonfun$sourceMap(PlayReload.scala:69)
    at scala.collection.MapLike$MappedValues.get(MapLike.scala:260)
    at play.runsupport.Reloader.$anonfun$findSource(Reloader.scala:547)
    at scala.Option.flatMap(Option.scala:271)
    at play.runsupport.Reloader.findSource(Reloader.scala:546)
    at play.core.server.DevServerStart$$anon$$anon.sourceOf(DevServerStart.scala:171)
    at play.core.SourceMapper.$anonfun$sourceFor(ApplicationProvider.scala:21)
    at play.core.SourceMapper.$anonfun$sourceFor$adapted(ApplicationProvider.scala:21)
    at scala.collection.ArrayOps$.find$extension(ArrayOps.scala:684)
    at play.core.SourceMapper.sourceFor(ApplicationProvider.scala:21)
    at play.core.SourceMapper.sourceFor$(ApplicationProvider.scala:20)
    at play.core.server.DevServerStart$$anon$$anon.sourceFor(DevServerStart.scala:169)
    at play.api.http.HttpErrorHandlerExceptions$.$anonfun$throwableToUsefulException(HttpErrorHandler.scala:358)
    at scala.Option.flatMap(Option.scala:283)
    at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:358)
    at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:261)
    at play.filters.cors.AbstractCORSPolicy$$anonfun.applyOrElse(AbstractCORSPolicy.scala:128)
    at play.filters.cors.AbstractCORSPolicy$$anonfun.applyOrElse(AbstractCORSPolicy.scala:126)
    at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:453)
    at play.api.libs.streams.Execution$trampoline$.execute(Execution.scala:70)
    at scala.concurrent.impl.Promise$Transformation.submitWithValue(Promise.scala:392)
    at scala.concurrent.impl.Promise$DefaultPromise.submitWithValue(Promise.scala:302)
    at scala.concurrent.impl.Promise$DefaultPromise.tryComplete0(Promise.scala:249)
    at scala.concurrent.impl.Promise$Transformation.handleFailure(Promise.scala:407)
    at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:469)
    at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:56)
    at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run(BatchingExecutor.scala:93)
    at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
    at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:94)
    at akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:93)
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:48)
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(ForkJoinExecutorConfigurator.scala:48)
    at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
    at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1016)
    at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1665)
    at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1598)
    at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)

当在默认或自定义 Play 错误处理程序中处理服务器错误期间发生异常时,您最终会遇到此错误。参见 play.api.http.HttpErrorHandler

这是 play 和 sbt 之间的不兼容问题,现已修复: https://github.com/playframework/playframework/issues/10486