ОШИБКА JMH: Не удалось найти ресурс: /META-INF/BenchmarkList

Ошибка JMH «Не удалось найти ресурс: /META-INF/BenchmarkList» чаще всего наблюдается, когда мы не настраиваем плагин компилятора на использование процессора аннотаций JMH во время компиляции исходного кода.

1. Проблема

Если мы не включим процессор аннотаций JMH во время компиляции, а затем запустим класс с аннотациями JMH(например, @Benchmark), то получим следующую ошибку во время выполнения:

Exception in thread "main" java.lang.RuntimeException: ERROR: Unable to find the resource: /META-INF/BenchmarkListat org.openjdk.jmh.runner.AbstractResourceReader.getReaders(AbstractResourceReader.java:98)at org.openjdk.jmh.runner.BenchmarkList.find(BenchmarkList.java:124)at org.openjdk.jmh.runner.Runner.internalRun(Runner.java:253)at org.openjdk.jmh.runner.Runner.run(Runner.java:209)at org.openjdk.jmh.Main.main(Main.java:71)at com.howtodoinjava.core.basic.ForLoopPerformanceTest.main(ForLoopPerformanceTest.java:15)

2. Решение

Чтобы устранить проблему, включите процессор аннотаций JMH в плагин компилятора и пересоберите проект.

<plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>17</source><target>17</target><annotationProcessorPaths><path><groupId>org.openjdk.jmh</groupId><artifactId>jmh-generator-annprocess</artifactId><version>1.35</version></path></annotationProcessorPaths></configuration></plugin><plugins>

В Maven для пересборки проекта выполните команду чистой установки:

$ mvn clean install

После того, как мы выполним оба шага и запустим класс бенчмарка JMH, он будет работать нормально.

3. Пример конфигурации JMH

Ниже приведены основные элементы конфигурации и зависимости для JMH в обычном проекте Java. Пожалуйста, проверьте, что вы правильно настроили все части.

<properties><jmh.version>1.35</jmh.version></properties><dependencies><dependency><groupId>org.openjdk.jmh</groupId><artifactId>jmh-core</artifactId><version>${jmh.version}</version></dependency><dependency><groupId>org.openjdk.jmh</groupId><artifactId>jmh-generator-annprocess</artifactId><version>${jmh.version}</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>17</source><target>17</target><annotationProcessorPaths><path><groupId>org.openjdk.jmh</groupId><artifactId>jmh-generator-annprocess</artifactId><version>${jmh.version}</version></path></annotationProcessorPaths></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>3.2.0</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><finalName>benchmarks</finalName><transformers><transformerimplementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>org.openjdk.jmh.Main</mainClass></transformer></transformers></configuration></execution></executions></plugin></plugins></build>

Пожалуйста, напишите в комментариях, сработало ли для вас это решение или нет.

Прокрутить вверх