【问题标题】:Gatling compatibility issue with Scala 2.13.0 in IntelliJ在 IntelliJ 中与 Scala 2.13.0 的 Gatling 兼容性问题
【发布时间】:2019-11-04 10:06:18
【问题描述】:

问题

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

我尝试过的一些事情

只有在使用 IntelliJ 配置运行项目时才会出现此错误,但在运行 mvn packagemvn gatling:test 时不会出现此错误。如果我使用 IntelliJ 配置和 Scala 2.12.8,我也不会收到错误消息。

我认为这可能是一个兼容性问题,并检查了 Gatling 文档和 release notes,但他们 mentioned 关于 Scala 兼容性的最后一件事是,来自 Gatling 上的 2.3 需要 Scala 2.12。我想这意味着2.12 或更高。在这一点上我错了吗?

我还检查了 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 的“运行”按钮后收到的错误消息(我将一些不相关的项目特定信息更改为 &lt;&gt; 之间的 cmets):

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 还很陌生,所以我很有可能会遗漏一些东西。

任何见解将不胜感激。

【问题讨论】:

    标签: scala maven intellij-idea gatling scala-2.13


    【解决方案1】:

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

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

    回到 2.12 可能最容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-15
      • 2014-08-22
      • 2016-08-15
      • 2011-05-04
      • 1970-01-01
      • 2018-03-23
      • 2014-08-20
      • 1970-01-01
      相关资源
      最近更新 更多