编译 Play 框架测试时出现错误“scala.reflect.internal.MissingRequirementError: object scala.runtime in compiler m

Posted

技术标签:

【中文标题】编译 Play 框架测试时出现错误“scala.reflect.internal.MissingRequirementError: object scala.runtime in compiler mirror not found”【英文标题】:Error "scala.reflect.internal.MissingRequirementError: object scala.runtime in compiler mirror not found" when compiling Play framework tests 【发布时间】:2014-05-12 19:50:58 【问题描述】:

我在为我系统上的每个播放项目执行“播放干净测试”时遇到此错误:

[信息] 将 9 个 Scala 源代码和 302 个 Java 源代码编译到 $HOME/Workspace/sis/target/scala-2.10/test-classes... [错误] 加载时出错,打开 zip 文件时出错 scala.reflect.internal.MissingRequirementError:找不到编译器镜像中的对象 scala.runtime。 在 scala.reflect.internal.MissingRequirementError$.signal(MissingRequirementError.scala:16) 在 scala.reflect.internal.MissingRequirementError$.notFound(MissingRequirementError.scala:17) 在 scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:48) 在 scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:40) 在 scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:61) 在 scala.reflect.internal.Mirrors$RootsBase.getPackage(Mirrors.scala:172) 在 scala.reflect.internal.Mirrors$RootsBase.getRequiredPackage(Mirrors.scala:175) 在 scala.reflect.internal.Definitions$DefinitionsClass.RuntimePackage$lzycompute(Definitions.scala:181) 在 scala.reflect.internal.Definitions$DefinitionsClass.RuntimePackage(Definitions.scala:181) 在 scala.reflect.internal.Definitions$DefinitionsClass.RuntimePackageClass$lzycompute(Definitions.scala:182) 在 scala.reflect.internal.Definitions$DefinitionsClass.RuntimePackageClass(Definitions.scala:182) 在 scala.reflect.internal.Definitions$DefinitionsClass.AnnotationDefaultAttr$lzycompute(Definitions.scala:997) 在 scala.reflect.internal.Definitions$DefinitionsClass.AnnotationDefaultAttr(Definitions.scala:996) 在 scala.reflect.internal.Definitions$DefinitionsClass.syntheticCoreClasses$lzycompute(Definitions.scala:1126) 在 scala.reflect.internal.Definitions$DefinitionsClass.syntheticCoreClasses(Definitions.scala:1125) 在 scala.reflect.internal.Definitions$DefinitionsClass.symbolsNotPresentInBytecode$lzycompute(Definitions.scala:1169) 在 scala.reflect.internal.Definitions$DefinitionsClass.symbolsNotPresentInBytecode(Definitions.scala:1169) 在 scala.reflect.internal.Definitions$DefinitionsClass.init(Definitions.scala:1234) 在 scala.tools.nsc.Global$Run.(Global.scala:1281) 在 xsbt.CachedCompiler0.run(CompilerInterface.scala:87) 在 xsbt.CachedCompiler0.run(CompilerInterface.scala:72) 在 xsbt.CompilerInterface.run(CompilerInterface.scala:27​​) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 sbt.compiler.AnalyzingCompiler.call(AnalyzingCompiler.scala:73) 在 sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:35) 在 sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:29) 在 sbt.compiler.AggressiveCompile$$anonfun$4$$anonfun$compileScala$1$1.apply$mcV$sp(AggressiveCompile.scala:71) 在 sbt.compiler.AggressiveCompile$$anonfun$4$$anonfun$compileScala$1$1.apply(AggressiveCompile.scala:71) 在 sbt.compiler.AggressiveCompile$$anonfun$4$$anonfun$compileScala$1$1.apply(AggressiveCompile.scala:71) 在 sbt.compiler.AggressiveCompile.sbt$compiler$AggressiveCompile$$timed(AggressiveCompile.scala:101) 在 sbt.compiler.AggressiveCompile$$anonfun$4.compileScala$1(AggressiveCompile.scala:70) 在 sbt.compiler.AggressiveCompile$$anonfun$4.apply(AggressiveCompile.scala:88) 在 sbt.compiler.AggressiveCompile$$anonfun$4.apply(AggressiveCompile.scala:60) 在 sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:24) 在 sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:22) 在 sbt.inc.Incremental$.cycle(Incremental.scala:45) 在 sbt.inc.Incremental$.compile(Incremental.scala:29) 在 sbt.inc.IncrementalCompile$.apply(Compile.scala:20) 在 sbt.compiler.AggressiveCompile.compile2(AggressiveCompile.scala:96) 在 sbt.compiler.AggressiveCompile.compile1(AggressiveCompile.scala:44) 在 sbt.compiler.AggressiveCompile.apply(AggressiveCompile.scala:31) 在 sbt.Compiler$.apply(Compiler.scala:79) 在 sbt.Defaults$$anonfun$compileTask$1.apply(Defaults.scala:572) 在 sbt.Defaults$$anonfun$compileTask$1.apply(Defaults.scala:572) 在 sbt.Scoped$$anonfun$hf2$1.apply(Structure.scala:578) 在 sbt.Scoped$$anonfun$hf2$1.apply(Structure.scala:578) 在 scala.Function1$$anonfun$compose$1.apply(Function1.scala:49) 在 sbt.Scoped$Reduced$$anonfun$combine$1$$anonfun$apply$12.apply(Structure.scala:311) 在 sbt.Scoped$Reduced$$anonfun$combine$1$$anonfun$apply$12.apply(Structure.scala:311) 在 sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:41) 在 sbt.std.Transform$$anon$5.work(System.scala:71) 在 sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:232) 在 sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:232) 在 sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18) 在 sbt.Execute.work(Execute.scala:238) 在 sbt.Execute$$anonfun$submit$1.apply(Execute.scala:232) 在 sbt.Execute$$anonfun$submit$1.apply(Execute.scala:232) 在 sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:160) 在 sbt.CompletionService$$anon$2.call(CompletionService.scala:30) 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 在 java.util.concurrent.FutureTask.run(FutureTask.java:138) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439) 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 在 java.util.concurrent.FutureTask.run(FutureTask.java:138) 在 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) 在 java.lang.Thread.run(Thread.java:695) [错误](测试:编译)scala.reflect.internal.MissingRequirementError:找不到编译器镜像中的对象scala.runtime。 [错误] 总时间:39 秒,2014 年 4 月 1 日下午 4:08:27 完成 play clean test 103.37s user 3.60s system 224% cpu 47.737 total

最近在使用 homebrew 更新了一些软件包后突然开始发生这种情况,但我不确定这是否是原因,因为我卸载了 homewbrew 并使用他们网站上的 play zip 软件包只是为了得到同样的问题。

我尝试过的其他事情:

清除主目录中的 .sbt、.ivy、.m2 目录 卸载/重新安装 scala/play/java,使用 play framework clean 命令,清理 repo 等。

【问题讨论】:

【参考方案1】:

TL;DR 我们依赖的 powermock.jar 文件不是 jar 文件。

我能够在一个新的游戏项目中运行“游戏测试”,但在我的系统中没有一个更成熟的项目。所以我决定删除文件,直到我通过测试。我首先删除了所有的 scala 测试(我们混合使用了 Java 和 Scala)并得到了这个信息量更大的错误:

[error] error: error reading /usr/local/Cellar/play/2.1.1/libexec/repository/cache/org.powermock/powermock-mockito-release-full/jars/powermock-mockito-release-full-1.5.jar; cannot read zip file

我查看了jar文件:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <style type="text/css">
            html, body, #partner, iframe 
                height:100%;
                width:100%;
                margin:0;
                padding:0;
                border:0;
                outline:0;
                font-size:100%;
                vertical-align:baseline;
                background:transparent;
            
            body 
                overflow:hidden;
            
        </style>
        <meta content="NOW" name="expires">
        <meta content="index, follow, all" name="GOOGLEBOT">
        <meta content="index, follow, all" name="robots">
        <!-- Following Meta-Tag fixes scaling-issues on mobile devices -->
        <meta content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" name="viewport">
    </head>
    <body>
        <div id="partner"></div>
        <script type="text/javascript">
            document.write(
                    '<script type="text/javascript" language="JavaScript"'
                            + 'src="//sedoparking.com/frmpark/'
                            + window.location.host + '/'
                            + 'tierraexpired'
                            + '/park.js">'
                    + '<\/script>'
            );
        </script>
    </body>
</html>

我们依赖于 powermock 1.5:

"org.powermock" % "powermock-mockito-release-full" % "1.5" % "test"

快速浏览一下 powermock 站点,似乎 powermock 1.5 已被弃用,并且可能已被撤消。但我们实际上是从 Artifactory 提供这个特定文件,并且无论出于何种原因,它都开始提供 HTML。

不知道为什么它没有通过签名验证或给我们一个稍微更多信息的错误。

【讨论】:

以上是关于编译 Play 框架测试时出现错误“scala.reflect.internal.MissingRequirementError: object scala.runtime in compiler m的主要内容,如果未能解决你的问题,请参考以下文章

将应用程序包上传到 Play 管理中心时出现导入错误

Play 2.2:使用 Play Caching (Scala) 对代码进行单元测试时出现问题

重新运行测试时出现 NullPointerException

对 Vapor Web 框架进行基准测试时出现邮箱完全错误

调用 [playerFactory play] 方法时出现错误访问错误

当运行测试用例时出现错误“找不到机器人框架安装”以及如何解决这个问题?