WedX - журнал о программировании и компьютерных науках

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

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


Ответы:


1

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

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

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

21.06.2019
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]