Смешайте Ломбок, Java и Scala в проекте maven

#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 и использовал его для заполнения полей. Это было самое чистое решение, которое я мог придумать, так как я не очень беспокоюсь о том, что оно будет немного медленнее.