Eclipse内で単純なJMHベンチマークを実行できません。 Mavenの依存関係:
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-core</artifactId>
<version>1.12</version>
</dependency>
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-generator-annprocess</artifactId>
<version>1.12</version>
</dependency>
Javaコード:
public class BTest {
@Benchmark
public void test() {
// todo
}
public static void main(String[] args) throws RunnerException {
Options opt = new OptionsBuilder()
.include(BTest.class.getSimpleName())
.build();
new Runner(opt).run();
}
}
実行結果:
スレッド "main"の例外Java.lang.RuntimeException:エラー:リソースが見つかりません:org.openjdkのorg.openjdk.jmh.runner.AbstractResourceReader.getReaders(AbstractResourceReader.Java:96)の/ META-INF/BenchmarkList。 jmh.runner.BenchmarkList.find(BenchmarkList.Java:104)at org.openjdk.jmh.runner.Runner.internalRun(Runner.Java:256)at org.openjdk.jmh.runner.Runner.run(Runner.Java: 206)com.test.BTest.main(BTest.Java:24)で
多分問題は、私がそれをEclipseから実行していることです。
最後にそれを見つけた。 exec-maven-plugin
プラグインの欠落に問題がありました
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<id>run-benchmarks</id>
<phase>integration-test</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<classpathScope>test</classpathScope>
<executable>Java</executable>
<arguments>
<argument>-classpath</argument>
<classpath />
<argument>org.openjdk.jmh.Main</argument>
<argument>.*</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
予想される回答で述べたように、私はすでに親pomにexec-maven-plugin
があることに気付きましたが、 https://stackoverflow.com/a/4074867 で述べたようにmvn clean install
を実行する必要がありました。 =エラーを修正する
同じエラーが発生した。また、mavenまたはintellijからテストを実行しても機能しませんでした。問題はKotlinでベンチマークを作成したことだと気づきました。コードをJavaに変更すると、問題が分類されました。
これは、コンパイラプラグインがJMH関連の注釈を処理していないときに発生する可能性があります。私にとって、 ギルの答え とmaven-compiler-plugin
の<annotationProcessorPaths>
更新が機能しました。