Подтвердить что ты не робот

"Нет совпадающих критериев" при запуске JMH из основного в eclipse

Я хотел попробовать новую функцию JMH, запустив ее как приложение Java в eclipse. Я импортировал и строил проект jmh-samples. Скомпилированные классы закончились в/jmh-samples/target/сгенерированные источники/аннотации, есть несколько JAR в/target/и запущен файл microbenchmarks.jar из командной строки, как обычно.

Однако, когда я выполняю main, я всегда получаю

No matching benchmarks. Miss-spelled regexp?

Любые идеи? Я использую версию 0.3

4b9b3361

Ответ 1

Хорошо, похоже, по умолчанию jmh ищет генерируемые классы в META-INF/Microbenchmarks, которые maven build ставит под корень проекта. Однако корень проекта eclipse не находится в пути к классам, поэтому его выполнение в среде IDE приводит к "не найденным критериям".

Я запускал его следующим образом:

  • mvn clean package (с использованием внешней установки maven, не встроенной в затмении)
  • Щелкните правой кнопкой мыши проект jmh-samples, выберите "Build Путь → Использовать в качестве исходной папки
  • Теперь вы можете запустить любой из тестов из jmh-samples в качестве приложения Java в eclipse

В обратном порядке вы получаете как 1000+ "ошибок" в представлении "Проблемы", так как eclipse путается с автогенерируемыми файлами, но, по крайней мере, он работает.

Ответ 2

jmh-dev @ - лучший способ сообщить об этом разработчикам.

Несколько вещей, которые нужно попробовать:

  • Увольнение Main, вероятно, не очень хорошая идея. Вместо этого используйте Java API как этот пример.
  • Используйте -v extra для отладки соответствия шаблону: либо регулярное выражение фильтра неверно, либо нет контрольных показателей для запуска.
  • Если регулярное выражение неверно, исправьте его.
  • Если нет совпадений с критериями, то есть вероятность того, что ресурсы не будут генерироваться и/или правильно подняты. Убедитесь, что target/classes/ также доступен в пути к классам.

Ответ 3

Я также столкнулся с той же проблемой, и я следовал учебнику здесь. Это решило проблему.

Ниже приведены шаги, которые я предпринял:

  • Я использовал код из учебника КАК ЕСТЬ, чтобы понять, как он работает.

  • Тогда я просто очистил mvn и установил

  • Я видел весь набор классов, созданных в target -> annotations -> <package path> -> generated
  • Затем я запустил класс BenchmarkRunner main(), и это сработало.