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

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

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

No matching benchmarks. Miss-spelled regexp?

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


person Kranach    schedule 28.01.2014    source источник


Ответы (3)


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

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

  1. Угон Main, вероятно, не лучшая идея. Вместо этого используйте Java API, нравится этот образец.
  2. Используйте -v extra для отладки сопоставления с образцом: либо регулярное выражение фильтра неверно, либо нет тестов для запуска.
  3. Если регулярное выражение неверное, исправьте его.
  4. Если нет эталонных тестов, с которыми можно было бы сравнивать, есть вероятность, что ресурсы не генерируются и / или не собираются должным образом. Убедитесь, что target/classes/ также доступен в пути к классам.
person Aleksey Shipilev    schedule 29.01.2014
comment
Я ничего не делаю с main, но запускаю именно тот фрагмент кода, который вы связали (JMHSample_01_HelloWorld.java) ... target / classes находится в пути к классам. Однако при отладке кода jmh-core я вижу, что он пытается получить классы из META-INF / Microbenchmarks, которые находятся в корне проекта, а не внутри цели / классов ... - person Kranach; 11.02.2014

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

Я получил это следующим образом:

  1. mvn clean package (с использованием внешней установки maven, не встроенной в eclipse)
  2. Щелкните правой кнопкой мыши проект jmh-samples, выберите «Путь сборки -> Использовать как исходную папку».
  3. Теперь вы можете запускать любой из тестов из jmh-samples как Java-приложение в eclipse.

С другой стороны, вы получаете более 1000 «ошибок» в представлении «Проблемы», поскольку eclipse путается с автоматически сгенерированными файлами, но, по крайней мере, это работает.

person Kranach    schedule 11.02.2014
comment
Я добавил и jmh-samples/target/generated-sources/annotations, и jmh-samples/target/classes в качестве исходных папок, и у меня все работает без ошибок. Нет проблем с автоматически созданными файлами; это правильные источники Java (с тысячами предупреждений, но без ошибок) и фактически то, что запускается в тесте. - person maaartinus; 11.02.2014
comment
target/classes по умолчанию находятся в пути к классам, и добавление jmh-samples/target/generated-sources/annotations ничего вам не даст, потому что это не то место, где org.openjdk.jmh.Main ищет классы тестов. Проверьте значение org.openjdk.jmh.runner.MicroBenchmarkList.MICROBENCHMARK_LIST - person Kranach; 11.02.2014
comment
не дает вам ничего - за исключением того, что я получаю MicroBenchmark не соответствует классу, вызванному ClassNotFoundException. Договорились, что для MICROBENCHMARK_LIST это не нужно. - person maaartinus; 11.02.2014
comment
Что ж, возможно, ты прав. Как-то прогонял без него, но со всеми вышеперечисленными проблемами. И конфигурация, которая у вас была, не сработала. Теперь, чтобы доказать свою точку зрения, я удалил и стер этот проект, повторно импортировал и перестроил его, и внезапно он работает так, как задумано ... - person Kranach; 14.02.2014

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

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

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

  • Затем я просто очистил mvn и установил

  • Я видел весь набор классов, создаваемых в target -> annotations -> <package path> -> generated
  • Затем я запустил класс BenchmarkRunner main(), и это сработало.
person ctimus    schedule 01.10.2019
comment
Ссылка на решение приветствуется, но убедитесь, что ваш ответ полезен и без нее: добавьте контекст вокруг ссылки, чтобы другие пользователи иметь некоторое представление о том, что это такое и почему он существует, а затем процитировать наиболее релевантную часть страницы, на которую вы ссылаетесь, в случае, если целевая страница недоступна. Ответы, которые представляют собой не более чем ссылку, могут быть удалены. - person Das_Geek; 01.10.2019
comment
Спасибо @Das_Geek. Я обновил свои ответы, чтобы добавить больше. Надеюсь, это добавит немного большей актуальности. - person ctimus; 01.10.2019
comment
Нет проблем! Спасибо, что нашли время улучшить свой ответ. - person Das_Geek; 01.10.2019