当前位置: 首页 > 知识库问答 >
问题:

IntelliJ中Scala 2.13.0与Gatling的兼容性问题

闻人凯泽
2023-03-14

我正在扩展一个现有的性能测试项目,这是一个Scala项目,它使用Gatling进行模拟,使用Maven作为构建工具。我需要Scalaj作为一个新的依赖者。我将Scala版本从2.12.8更改为2.13.0,以便使用最新版本的Scalaj(2.4.2),这导致使用io中的/运算符的类出现编译错误。加特林。平民util。PathHelper

仅当我使用IntelliJ config运行项目时,才会出现此错误,但如果我运行mvn packagemvn gatling:test,则不会出现此错误。如果使用IntelliJ配置和Scala2.12.8,也不会出现错误。

我认为这可能是一个兼容性问题,并检查了Gatling文档

我还检查了IntelliJ Scala插件是否有更新,但什么也没找到。

这是我的pom.xml文件的相关部分:

    <dependencies>
        <dependency>
            <groupId>io.gatling.highcharts</groupId>
            <artifactId>gatling-charts-highcharts</artifactId>
            <version>3.0.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.13.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.scalaj/scalaj-http -->
        <dependency>
            <groupId>org.scalaj</groupId>
            <artifactId>scalaj-http_2.13</artifactId>
            <version>2.4.2</version>
        </dependency>
    </dependencies>

编译的类(其中/是导入类的函数):

package com.example.mypackage
import io.gatling.commons.util.PathHelper._


object PathHelper {
  val projectRootDir: Path = "root_directory"
  val mavenSourcesDirectory: Path = projectRootDir / "src"
}

一个例子切入点:

package com.example.mypackage

object ApplicationRunner {

  def main(args: Array[String]): Unit = {
    println(mavenSourcesDirectory.toString)
  }

}

点击IntelliJ的Run按钮后收到的错误消息(我将一些不相关的项目特定信息更改为

Error:scalac: Error: assertion failed: 
  no extension method found for:
  method /:(pathString: String)java.nio.file.Path
 Candidates:

 Candidates (signatures normalized):
 " 
     while compiling: /home/me/example-repo/src/test/scala/com/example/mypackage/PathHelper.scala
        during phase: globalPhase=erasure, enteringPhase=refchecks
     library version: version 2.13.0
    compiler version: version 2.13.0
  reconstructed args: -classpath <.jar path for every dependency I use>
  last tree to typer: Select(Apply(method to), foreach$mVc$sp)
       tree position: <some line in an entirely different class where I don't use PathHelper>
            tree tpe: (f: Int => Unit)Unit
              symbol: (final override) method foreach$mVc$sp in class Range
   symbol definition: final override def foreach$mVc$sp(f: Int => Unit): Unit (a MethodSymbol)
      symbol package: scala.collection.immutable
       symbol owners: method foreach$mVc$sp -> class Range
           call site: object PathHelper in package mypackage in package mypackage
== Source file context for tree position ==
  12    <line from file>
  13    <line from file>
  14    <tree position>
  15    <line from file>
    at scala.reflect.internal.SymbolTable.throwAssertionError(SymbolTable.scala:170)
    at scala.tools.nsc.transform.ExtensionMethods.$anonfun$extensionMethod$1(ExtensionMethods.scala:54)
    at scala.tools.nsc.transform.ExtensionMethods.extensionMethod(ExtensionMethods.scala:49)
    at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$4.preEraseNormalApply(Erasure.scala:1102)
    at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$4.preEraseApply(Erasure.scala:1204)
    at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$4.preErase(Erasure.scala:1214)
    at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$4.transform(Erasure.scala:1333)
    at scala.tools.nsc.transform.Erasure$ErasureTransformer$$anon$4.transform(Erasure.scala:993)
    at scala.reflect.internal.Trees$ValDef.$anonfun$transform$4(Trees.scala:405)
    at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2625)
    <and so on for 78 more lines of stack trace>

毕竟,对我来说,它看起来像一个IntelliJ依赖处理问题。我已经找到了两个变通方法,所以这个问题并没有杀死我,但是它很不方便,我有兴趣学习如何修复它。另外,我对Scala还相当陌生,所以很有可能我错过了一些东西。

如有任何见解,将不胜感激。


共有1个答案

桂学
2023-03-14

我自己还没有尝试过,但似乎Gatling还不能与Scala 2.13兼容:

https://github.com/gatling/gatling/issues/3566

回到2.12可能是最容易的。

 类似资料:
  • 在IntelliJ 202.2的最后更新后,我得到错误: 插件“Lombok”不兼容(直到build 201.SNAPSHOT) 我一直在寻找这个问题,但似乎我是唯一一个有这个IntelliJ版本问题的人。

  • 我一直在我的笔记本电脑上使用lwjgl和GLSL 1.3进行一个项目。我的着色器在我的笔记本电脑上编译得很好,但是,当尝试在我的桌面上编译相同的着色器时,它有一个更新的显卡,我收到一个错误,说明着色器无法编译,因为着色器中存在错误。但是,着色器日志不会输出任何错误。我认为GLSL向后兼容它自己。 返回 我假设它与标准的GLSL 3.30相同。这是一个示例vertandfrag着色器,它适用于我的笔

  • 我一直试图编写一些opengl代码,在任何地方都可以使用,但又不太限制自己。 我想在只支持opengles2的设备上使用opengles2,在支持opengl核心的设备上使用opengles2。 另外,我希望能够在运行时选择使用哪一个(当然,如果可用的话)。 我知道GLEW,但不幸的是,大多数linux distros发布的GLEW版本仍然不兼容GLES2(debian,我在看你)。它只是分割断层

  • 我想用JavaFXPorts和静态编程语言代码构建一个JavaFXAndroid应用。在JavaFXPorts项目中可以使用静态编程语言吗?下面是我的示例Gradle(版本5.6.4)项目: 注意:这段代码的问题是Kotlin运行时。。。有没有办法把所有东西捆绑在可执行Jar和Apk中? ./settings.gradle.kts /建造。格雷德尔。kts /应用/构建。格雷德尔。kts ./ap

  • 是否可以使用web3J收听infura事件?我正在尝试获取事件,但出错 我在不同的博客中读到,使用web3J无法获取过滤事件,那么使用web3J和infura获取过滤事件的替代方案是什么?