当前位置: 首页 > 知识库问答 >
问题:

JMH找不到资源:/META-INF/BechmarkList

澹台建华
2023-03-14

我无法在日食中运行简单的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();
    }
}

运行结果:

线程“主要”中的异常 java.lang.运行时异常异常: 错误: 无法找到资源: /META-INF/BenchmarkList 在 org.openjdk.jmh.runner.runner.abstractResourceReader.getReaders(抽象资源读取器.java:96) 在 org.openjdk.jmh.runner.BenchmarkList.查找(BenchmarkList.java:104) 在 org.openjdk.runner.内部运行(运行者.java:256) 在 org.openjdk.jmh.runner.runner.run(Runner.java:206) 在 com.test.BTest.main(BTest.java:24)

也许问题在于,我是从eclipse运行它的。

共有3个答案

有玄天
2023-03-14

pom.xml必须具有以下对Java微基准线束(JMH)框架的依赖性和配置

<properties>
    <jmh.version>1.21</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>
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.11</version>
  <scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>java-jmh</finalName>
<plugins>
    <plugin>    
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
            <annotationProcessorPaths>
                <path>
                    <groupId>org.openjdk.jmh</groupId>
                    <artifactId>jmh-generator-annprocess</artifactId>
                    <version>${jmh.version}</version>
                </path>
            </annotationProcessorPaths>
        </configuration>
    </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>
</plugins>

之后,转到命令行并运行命令$mvn clean install

庄瀚玥
2023-03-14

如果有人正在使用Gradle,请将jmh-Gradle插件添加到插件块中:

plugins {
    id 'java'
    id 'me.champeau.jmh' version '0.6.6'
}

然后在依赖块中添加以下所有内容(点击这里查看Maven上JMH的最新版本):

dependencies {
    jmh 'org.openjdk.jmh:jmh-core:1.35'
    jmh 'org.openjdk.jmh:jmh-generator-annprocess:1.35'

    // this is the line that solves the missing /META-INF/BenchmarkList error
    jmhAnnotationProcessor 'org.openjdk.jmh:jmh-generator-annprocess:1.35'
}

然后,只需使用以下方法在Gradle中运行基准:

./gradlew jmh

如果您还想从IDE中运行基准测试,而不是通过Gradle,您可以执行以下任一操作:

只需使用没有额外配置的main方法,您的IDE就会尊重您的注释配置:

@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@State(Scope.Benchmark)
@Fork(value = 1)
@Warmup(iterations = 5, timeUnit = TimeUnit.MILLISECONDS, time = 5000)
@Measurement(iterations = 5, timeUnit = TimeUnit.MILLISECONDS, time = 5000)
public class MyBenchmark {

    public static void main(String[] args) throws RunnerException {
        Options options = new OptionsBuilder()
            .include(MyBenchmark.class.getSimpleName())
            .build();
        new Runner(options).run();
    }

    // benchmarks omitted
}

如果您正在使用IntelliJ,请从Preferences安装JMH Java Micro线束基准插件

公孙宏远
2023-03-14

终于找到了。缺少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>
 类似资料:
  • 问题内容: 我无法在Eclipse中运行简单的JMH基准测试。Maven依赖项: Java代码: 运行结果: 线程“主”中的异常java.lang.RuntimeException:错误:无法找到资源:org.openjdk上的org.openjdk.jmh.runner.AbstractResourceReader.getReaders(AbstractResourceReader.java:9

  • 因此,在我的主程序中,我运行以下内容。 它总是返回false,这意味着它没有找到'dummydevice' 在我的eclipse项目中,我在'src'处创建了一个名为META-INF的文件夹,在它下面创建了一个名为'services'的子文件夹。 我做对了吗?我看到的每一个关于SPI的例子都是关于加载JAR的。我不是在加载一个JAR,我是想在同一个项目中运行一个类。这个方法只适用于装入罐子吗?我希

  • “在Meta-INF/Spring.Factories中找不到自动配置类” 最小示例: 使用SpringInitializr(https://start.spring.io),在几秒钟内就可以创建一个迷你应用程序来复制这个问题。使用的SpringInitializr标记是:“web”和“vaadin”。 运行应用程序时使用 您将得到以下错误消息: “在Meta-INF/Spring.Factori

  • 我正在构建一个模块化Web应用程序,其中包含一些打包在jar依赖项(不同模块)中的Spring组件。此jar还包含一些JSP资源,例如: 现在,我想在应用程序中使用以下结构重写特定的JSP。 使用tomcat7:run运行应用程序时,有时会显示覆盖的菜单。但任何后续运行都将以旧运行结束。 使用tomcat7运行:run war更有希望。大多数运行新菜单。显示jsp。但当将应用程序部署到另一个Tom

  • 我正在做一个项目,编译并运行我的IDE工作正常。所有资源都找到了,它正常工作。然而,当我构建我的. jar时,它能够找到一些资源,但不是全部。我的项目结构看起来是这样的: 当我运行jar文件时,它能够找到图像并使用它们,但是当我尝试访问html文件时,它不会打开。下面是jar的项目结构; 我以前从未处理过jar文件,所以这似乎是我犯的一个非常明显的错误。感谢您的帮助,谢谢! 编辑:访问找不到的文件

  • 我正在使用ADT 我的styles.xml: