web-dev-qa-db-ja.com

JMHリソースが見つかりません:/ META-INF / BenchmarkList

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から実行していることです。

27
riva

最後にそれを見つけた。 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>
11
riva

予想される回答で述べたように、私はすでに親pomにexec-maven-pluginがあることに気付きましたが、 https://stackoverflow.com/a/4074867 で述べたようにmvn clean installを実行する必要がありました。 =エラーを修正する

2
ankitkpd

同じエラーが発生した。また、mavenまたはintellijからテストを実行しても機能しませんでした。問題はKotlinでベンチマークを作成したことだと気づきました。コードをJavaに変更すると、問題が分類されました。

0
PeterK

これは、コンパイラプラグインがJMH関連の注釈を処理していないときに発生する可能性があります。私にとって、 ギルの答えmaven-compiler-plugin<annotationProcessorPaths>更新が機能しました。

0
rahulkesharwani