Проблема совместимости Gatling со Scala 2.13.0 в IntelliJ

Проблема

Я расширяю существующий проект тестирования производительности, который представляет собой проект Scala, использующий Gatling для моделирования и Maven в качестве инструмента сборки. Мне нужен Scalaj как новая зависимость. Я изменил версию Scala с 2.12.8 на 2.13.0, чтобы использовать самую последнюю версию Scalaj (2.4.2), и это привело к ошибке компиляции класса, который использует оператор / из io.gatling.commons.util.PathHelper.

Некоторые вещи, которые я пробовал

Я получаю эту ошибку, только если запускаю проект с использованием конфигурации IntelliJ, но не запускаю mvn package и mvn gatling:test. Я также не получаю ошибку, если использую конфигурацию IntelliJ и Scala 2.12.8.

Я подумал, что это может быть проблема совместимости, и проверил документацию Gatling и примечания к выпуску, но последнее, что они упомянул касались совместимости со Scala, заключалось в том, что из 2.3 на Gatling требуется 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 (я изменил некоторую нерелевантную информацию о проекте на комментарии между <>):

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, поэтому есть большая вероятность, что я что-то упустил.

Любое понимание будет оценено.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
2 528
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сам не пробовал, но кажется, что Gatling еще не совместим со Scala 2.13:

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

Возможно, будет проще вернуться к версии 2.12.

Другие вопросы по теме