Eclipse,Maven& JMH:没有匹配的基准

时间:2015-11-08 18:10:29

标签: java eclipse maven jmh

我有一个maven项目,相关的html { background-color: white; } body { position: relative; margin: 0; padding: 0; overflow: hidden; background-color: silver; } .absolute { position: absolute; top: 0; left: 0; width: 50px; height: 50px; background-color: darkblue; } .wrapper { position: relative; overflow:hidden; width: 50%; height: 200px; overflow: hidden; background-color: yellow; } .wrapper > .absolute { background-color: darkcyan; }

<div class="absolute"></div>
<h1>Some title</h1>

<div class="wrapper">
  <div class="absolute"></div>
  <h1>Some title</h1>
</div>

我按照官方示例here

我的pom.xml课程如下:

<dependency>
  <groupId>org.openjdk.jmh</groupId>
  <artifactId>jmh-core</artifactId>
  <version>0.1</version>
</dependency>

当我通过Eclipse运行时,我仍然收到以下错误。 App.java

1 个答案:

答案 0 :(得分:4)

问题是JMH默认情况下会查找目录/META-INF/MicroBenchmarks以查找要运行的基准测试,但Maven不会将类编译到此目录。要使其在Eclipse中运行,请参阅this answer

但是,我建议您直接在命令行上运行基准测试(Eclipse可能会增加一些开销)。

我注意到您使用的是版本0.1,这是JMH的第一个版本。最好更新到上一个版本。开始使用JMH的最佳方法是使用原型jmh-java-benchmark-archetype生成项目:

$ mvn archetype:generate \
      -DinteractiveMode=false \
      -DarchetypeGroupId=org.openjdk.jmh \
      -DarchetypeArtifactId=jmh-java-benchmark-archetype \
      -DgroupId=org.sample \
      -DartifactId=jmh-test \
      -Dversion=1.0

这将使用预先配置的最新JMH版本从头开始生成Maven项目,而无需担心打包。然后,您可以将此新项目作为现有Maven项目导入Eclipse,并开始编写基准编码。

之后,您只需要运行:

$ cd jmh-test/
$ mvn clean install
$ java -jar target/benchmarks.jar

为了让您快速入门,这是一个示例基准测试(无所事事......)。

import java.util.concurrent.TimeUnit;

import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Fork;
import org.openjdk.jmh.annotations.Measurement;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.OutputTimeUnit;
import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.annotations.Warmup;

@Warmup(iterations = 5, time = 1000, timeUnit = TimeUnit.MILLISECONDS)
@Measurement(iterations = 10, time = 1000, timeUnit = TimeUnit.MILLISECONDS)
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@Fork(3)
@State(Scope.Benchmark)
public class StreamTest {

    @Benchmark
    public void benchmark() {
        // code here
    }

}