sbt在编译时抛出AssertionError,并出现无法识别的错误消息

如何解决sbt在编译时抛出AssertionError,并出现无法识别的错误消息

在对代码进行一些小的更改之后,尝试重新编译sbt项目时,我收到了这些奇怪的错误消息。有时,根据所编辑的代码,在清理sbt项目后该错误会消失,但其他时候该错误仍然存​​在。

错误显示方式(但不会持续存在)的一个示例

将此方法添加到Terrain类并进行编译会产生一条错误消息,该消息在清理项目并重新编译后消失:

def genChunkInputData(p: Vector3i): FloatBuffer = {
    val inputData = MemoryUtil.memAllocFloat(4 * (Chunk.SIZE+ 1) * (Chunk.SIZE+ 1) * (Chunk.SIZE+ 1))
    val r = (0 to Chunk.SIZE + 1)
    for (i <- r; j <- r; k <- r) {
        inputData.put(0.1F + 0.5F*min(i,Chunk.SIZE - i).toFloat/ Chunk.SIZE). //RED
                  put(0.1F + 0.5F*min(j,Chunk.SIZE - j).toFloat/ Chunk.SIZE). //GREEN
                  put(0.1F + 0.5F*min(k,Chunk.SIZE - k).toFloat/ Chunk.SIZE).//BLUE
                  put(isovalue((i + p(2)*Chunk.SIZE).toDouble,(j + p(1)*Chunk.SIZE).toDouble,(k + p(0)*Chunk.SIZE).toDouble)) //ISOVALUE
    }
    inputData.flip()
    inputData
}

以下是错误消息中的一些摘要:

[error] ## Exception when compiling 21 sources to D:\Computer science\Scala\Meandering Depths\target\scala-2.13\classes
    [error] java.lang.AssertionError: assertion failed:
    [error]   List(method apply$mcI$sp,method apply$mcI$sp)
    [error]      while compiling: D:\Computer science\Scala\Meandering Depths\src\main\scala\game\Terrain.scala
    [error]         during phase: globalPhase=specialize,enteringPhase=explicitouter
    [error]      library version: version 2.13.3
    [error]     compiler version: version 2.13.3
    [error]   reconstructed args: 

[error]
[error]   last tree to typer: Select(Ident(r),foreach$mVc$sp)

[error]        tree position: line 77 of D:\Computer science\Scala\Meandering Depths\src\main\scala\game\Terrain.scala
[error]             tree tpe: (f: Int => Unit): Unit
[error]               symbol: (final override) method foreach$mVc$sp in class Range
[error]    symbol definition: final override def foreach$mVc$sp(f: Int => Unit): Unit (a MethodSymbol)
[error]       symbol package: scala.collection.immutable
[error]        symbol owners: method foreach$mVc$sp -> class Range
[error]            call site: method $anonfun$genChunkInputData in package game
[error]
[error] == Source file context for tree position ==
[error]
[error]     74     def genChunkInputData(p: Vector3i): FloatBuffer = {
[error]     75         val inputData = MemoryUtil.memAllocFloat(4 * (Chunk.SIZE+ 1) * (Chunk.SIZE+ 1) * (Chunk.SIZE+ 1))
[error]     76         val r = (0 to Chunk.SIZE)
[error]     77         for (i <- r; j <- r; k <- r) {
[error]     78                     inputData.put(0.1F + 0.5F*min(i,Chunk.SIZE - i).toFloat/ Chunk.SIZE). //RED
[error]     79                               put(0.1F + 0.5F*min(j,Chunk.SIZE - j).toFloat/ Chunk.SIZE). //GREEN
[error]     80                               put(0.1F + 0.5F*min(k,Chunk.SIZE - k).toFloat/ Chunk.SIZE).//BLUE
[error] scala.reflect.internal.SymbolTable.throwAssertionError(SymbolTable.scala:170)
[error] scala.reflect.internal.Symbols$Symbol.suchThat(Symbols.scala:2024)[error] scala.tools.nsc.transform.SpecializeTypes$SpecializationTransformer.matchingSymbolInPrefix$1(SpecializeTypes.scala:1573)

但是,在按照以下步骤操作之后,如果您选择从Terrain类中删除该方法,它将再次引发类似的错误,但是这一次,源似乎已更改(更改为其他方法,该方法没有问题)之前工作正常)。同样,通过清理构建并重新编译,错误消失了。

以下是错误消息的更改:

[error]   last tree to typer: Function(value $anonfun)
[error]        tree position: line 150 of D:\Computer science\Scala\Meandering Depths\src\main\scala\game\Terrain.scala
[error]             tree tpe: Int => Unit
[error]               symbol: value $anonfun
[error] == Source file context for tree position ==
[error]
[error]    147

[error]    148     private def isovalue(x: Double,y: Double,z: Double): Float = {
[error]    149         var res = -0.1F
[error]    150         for (i <- 0 until 4)
[error]    151             res += amp(i) * noise(i).noise3_XYBeforeZ(freq(i) * x,freqY(i) * y,freq(i) * z).toFloat
[error]    152         res
[error]    153     }

奇怪的是,有时在执行以下步骤之后,添加了一些代码,编译并获得错误,清理构建并重新编译而没有错误,然后删除了所述代码并进行编译以获取新的错误消息,这显然是新的错误可能来自完全不同的类,在此之前,它的表现还不错。

更重要的是,这实际上是我真正的问题,尽管清洁了构建,有时代码更改仍导致错误持续存在。

错误消息告诉我的信息也很多,这也无济于事,令人困惑的是,有时它似乎指向了错误的来源。但是,我必须承认,我不太了解sbt的工作原理,我只是用它来导入一些库,但是以前没有任何问题。

编辑:显然,它是由scala编译器引起的,而不是sbt本身。错误消息似乎与此类似:https://github.com/scala/bug/issues/9578

我已经测试了该链接中的代码,它确实给出了与我的代码相同的错误类型(错误消息中显示的源再次与该错误无关)。我在项目中使用了微风,所以这似乎是问题的根源。我将尝试将其从项目中删除,看看是否仍然出现错误。

解决方法

我设法找到了问题的根源,正如预期的那样,它与sbt无关,但与Breeze无关。问题恰恰是此公开问题中的一个:https://github.com/scala/bug/issues/9578

我的解决方法是停止使用DenseVector [Int](现在我正在使用DenseVector [Float],但可能很快会切换到其他线性代数库)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-