#java #scala #maven #compilation #lombok
Вопрос:
У меня есть смешанный проект Scala/Java maven, в котором код приложения, модульные и интеграционные тесты написаны на Java, но тесты производительности написаны на Scala.
Тесты производительности Scala зависят от пары классов интеграционных тестов Java, которые имеют @Data
аннотации на Ломбоке. Для того , чтобы геттеры и сеттеры работали, я должен скомпилировать JavaThenScala
, что я могу сделать с помощью настроек компилятора IntelliJ Scala.
Мой вопрос в том, есть ли способ настроить плагины maven для выполнения JavaThenScala
компиляции без настройки параметров IntelliJ, поскольку я хотел бы развернуть код в другом месте?
Я пытаюсь использовать compileOrder
конфигурацию, но, похоже, это не помогает мне.
Мои плагины maven:
<build>
<plugins>
<plugin>
<groupId>met.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>4.0.0</version>
<configuration>
<compileOrder>JavaThenScala</compileOrder>
</configuration>
</plugin>
<plugin>
<groupId>io.gatling</groupId>
<artifactId>gatling-maven-plugin</artifactId>
<version>3.1.1</version>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Комментарии:
1. что происходит, когда ты бежишь
mvn clean package
?2. эй, @JRichardsz, я вижу
Error: value getVariable is not a member of the Class
, где он находится под аннотацией @Data. Если я изменю @Data на фактический геттер ,это сработает, или если я изменю настройки компилятора Scala в IntelliJ на JavaThenScala и повторно скомпилирую, это также сработает3. Я не уверен, что плагин scala-maven правильно работает с обработкой аннотаций Java.
4. Где происходит ваша ошибка? В вашем тесте scala, верно? Было бы полезно, если бы вы поделились mvp своего проекта. Простой весенний боб с его тестом.
5. Это как-то странно. пакет mvn сначала компилирует весь класс java , затем тесты и после этого запускает тест
Ответ №1:
Отказ от ответственности: основатель Gatling и соавтор плагина scala-maven здесь
Обработка аннотаций, в частности Ломбок, — это очень странный зверь. Похоже, плагин scala-maven не поддерживает его, см. https://github.com/davidB/scala-maven-plugin/issues/342 (был закрыт из-за отсутствия активности/вклада).
Затем я рекомендую вам изолировать свои тесты Гатлинга в выделенном модуле, чтобы вы могли создавать свои тестовые классы на основе Ломбока в чистом модуле Java, который будет публиковать тестовую банку, а затем ваш модуль Гатлинга будет зависеть от этой тестовой банки.
Комментарии:
1. Спасибо, что изучили это! Я чувствую, что в этот момент я мог бы просто добавить фактический геттер вместо аннотации lombok @Data для нескольких переменных, которые мне нужны для Scala, и продолжить с этим. Не самый красивый вариант, но он сработает.
2. К вашему сведению, Gatling 3.7 также предоставит Java DSL.
3. Согласитесь, просто не использовать Ломбок в тех немногих местах, которые вам нужны, может быть самым простым решением.
4. В итоге я просто создал метод
getScalaValues()
в своемTestUtils.java
классе, который получает все нужные мне значения с помощью ломбока и помещает их в хэш-карту. Затем просто создалval scalaValues: util.Map[String, String] = TestUtils.getScalaValues
файл в Scala и использовал его для заполнения полей. Это было самое чистое решение, которое я мог придумать, так как я не очень беспокоюсь о том, что оно будет немного медленнее.