AspectJ с Jacoco, вызывающим «случайные сбои» во время создания отчетаJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 AspectJ с Jacoco, вызывающим «случайные сбои» во время создания отчета

Сообщение Anonymous »

  • Windows 11 Pro (24 часа в сутки)
  • Java 21 (21.0.2 16.01.2024 LTS)
  • jacoco-maven-plugin 0.8.12
  • AspectJ 1.9.22.1
  • Spring Boot 3.3.4
  • JUnit 5
У меня есть служба Spring Boot, в которой я использую плагин Jacoco maven для создания отчета о покрытии тестами. Я также использую AspectJ (Aspectjrt и Aspectjweaver) для выполнения некоторого поведения во время выполнения в Hibernate Validator (в основном заменяя HashSet на LinkedHashSet в нескольких местах, чтобы сохранить порядок) .
  • В продакшене при отправке запросов в Postman все работает нормально. Все переплетение AspectJ работает так, как ожидалось.
  • Я также написал модульные тесты для проверки поведения переплетения во время выполнения. Когда я запускаю тесты (одиночные или несколько) в IntelliJ, все они проходят успешно.
  • Когда я запускаю все модульные тесты через командную строку с помощью mvnw test, все тесты также проходят успешно. .
Теперь о самом вопросе :). Когда я запускаю отчет Jacoco с помощью пакета mvnw -B -Pcoverage, я получаю «случайные», на первый взгляд несвязанные ошибки в несвязанных модульных тестах.
Эти ошибки отображаются как (I получите 4 из них в несвязанных модульных тестах):

Код: Выделить всё

 ┬╗ BootstrapMethod bootstrap method initialization exception
Далее в стеке вызовов я вижу:

Код: Выделить всё

Caused by: java.lang.ClassCastException: class java.lang.Class cannot be cast to class java.lang.invoke.MethodType (java.lang.Class and java.lang.invoke.MethodType are in module java.base of loader 'bootstrap')
... 14 more
Как я уже упоминал, ВСЕ эти тесты проходят безупречно при работе в IntelliJ или с помощью теста mvnw, но не тогда, когда я запускаю отчет Jacoco.
Я использую плагин Surefire и настроил его следующим образом:

Код: Выделить всё

org.apache.maven.plugins
maven-surefire-plugin


@{argLine}
-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
-XX:+EnableDynamicAgentLoading



Теперь, как указано выше, сначала у меня есть агент Jacoco, затем AspectJ. Вот как говорит парень из Джакоко. Я также нашел проблему на Github от парня из AspectJ, который сказал, что AspectJ должен быть первым.
Когда у меня сначала есть Jacoco, я сталкиваюсь с проблемой, о которой упоминал выше. Если я перенесу Jacoco на 2-ю позицию, то модульные тесты пройдут 100%, но Jacoco не сообщит о покрытии моего аспектного кода. Если сначала у меня есть Jacoco (и я закомментировал неудачные тесты), то он фактически сообщает о покрытии моего аспектного кода.
Кроме того, у меня есть действие Github, которое запускает отчет Jacoco ( в образе Linux) для создания значков покрытия, и если у меня сначала есть Jacoco, все проходит и покрытие работает как положено.
Итак, TLDR заключается в том, что у меня проблема возникает только при создании отчетов Jacoco. локально на моем компьютере с Windows 11. Это не могут быть мои модульные тесты или код аспекта, поскольку все они проходят тремя из четырех упомянутых мной способов. Затем я также заметил, что если я закомментирую один модульный тест, все эти несвязанные ошибки исчезнут.
Есть идеи?

Подробнее здесь: https://stackoverflow.com/questions/791 ... generation
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»