Java JMH不在Eclipse中工作(作为Maven项目)-没有要运行的基准测试
我想开始看看JMH,由于某些原因,我无法运行基准测试。让我解释一下我的尝试:Java JMH不在Eclipse中工作(作为Maven项目)-没有要运行的基准测试,java,eclipse,maven,microbenchmark,jmh,Java,Eclipse,Maven,Microbenchmark,Jmh,我想开始看看JMH,由于某些原因,我无法运行基准测试。让我解释一下我的尝试: 在Eclipse中设置maven项目 定义pom.xml如下: 下载了一些正式的JMH示例。作为示例,我选择了一个非常简单且很好的起点: 右键单击>运行方式>Java应用程序 但是,这会产生以下输出: Exception in thread "main" No benchmarks to run; check the include/exclude regexps. at org.openjdk.jmh.runne
Exception in thread "main" No benchmarks to run; check the include/exclude regexps.
at org.openjdk.jmh.runner.Runner.run(Runner.java:155)
at org.openjdk.jmh.samples.JMHSample_01_HelloWorld.main(JMHSample_01_HelloWorld.java:90)
我在谷歌上搜索过,上面的例子似乎应该有效,但对我来说并非如此。
我也试图通过阅读来解决这个问题,但这似乎对我不起作用:
- 我试图手动将生成的类移动到/META-INF/MicroBenchmarks,但这会产生以下错误:
线程“main”java.lang.IllegalStateException中的异常:JMHSample_01_HelloWorld.class行的格式不匹配 位于org.openjdk.jmh.runner.BenchmarkRecord.(BenchmarkRecord.java:92) 位于org.openjdk.jmh.runner.MicroBenchmarkList.find(MicroBenchmarkList.java:133) 位于org.openjdk.jmh.runner.runner.run(runner.java:150) 位于JMHSample_01_HelloWorld.main(JMHSample_01_HelloWorld.java:80)Exception in thread "main" java.lang.IllegalStateException: Mismatched format for the line: JMHSample_01_HelloWorld.class at org.openjdk.jmh.runner.BenchmarkRecord.<init>(BenchmarkRecord.java:92) at org.openjdk.jmh.runner.MicroBenchmarkList.find(MicroBenchmarkList.java:133) at org.openjdk.jmh.runner.Runner.run(Runner.java:150) at JMHSample_01_HelloWorld.main(JMHSample_01_HelloWorld.java:80)
jmhcore
的单一依赖就足够了。在JMH0.5中,注释处理功能被提取到单独的工件中,以促进对其他语言的支持
为了使注释处理器回到“旧的”基于Java的JMH项目中,应该声明对处理器工件的附加依赖关系:
org.openjdk.jmh
),如中所述
mvn原型:生成\
-DinteractiveMode=false\
-DarchetypeGroupId=org.openjdk.jmh\
-DarchetypeArtifactId=jmh java基准原型\
-DgroupId=my.benchmark.group\
-DartifactId=我的基准工件\
-Dversion=1.0
我在我的jmh+maven+eclipse项目的eclipse控制台中遇到了相同的错误,尽管我拥有所有必需的依赖项和插件
尝试从终端而不是eclipse中的嵌入式maven进行mvn清洁安装
,出现以下错误
ERROR: org.openjdk.jmh.runner.RunnerException: ERROR: Unable to acquire the JMH lock (/tmp/jmh.lock): already taken by another JMH instance, exiting. Use -Djmh.ignoreLock=true to forcefully continue.
at org.openjdk.jmh.runner.Runner.run(Runner.java:202)
at org.openjdk.jmh.Main.main(Main.java:71)
如上所述,我在Java应用程序启动器中添加了-Djmh.ignoreLock=true
作为虚拟机参数,它工作了我收到了相同的错误,因为我在之前运行了@Benchmark
类之后更改了包含该类的包的名称。“清理并构建”足以让它重新工作。您错过了将JMH注释处理器应用于基准测试的步骤。最好从使用在jmh中给出的示例命令从原型生成一个新项目开始。dev提供了关于在post-0.5jmh中使用注释处理器的更多信息。非常感谢!缺少批注处理器!:-)。我所做的只是:1)使用Eclipse>文件>新建maven项目创建新的maven项目2)使用默认工作区位置3)搜索组id“org.openjdk.jmh”4)选择“jmhJava基准原型”5)输入组id和工件id(例如jmh测试)6)用鼠标右键单击project>Run As>maven clean 7)用鼠标右键单击project>Run As>maven install安装maven 8)从JMH网站导入示例9)转到JMHSample_01_HelloWorld并作为Java应用程序运行,希望这对其他人有所帮助。@OlegEstekhin能以“答案”的形式提供答案吗,那么皮特施尔能接受吗?否则,该问题在搜索列表中会觉得没有答案:)谢谢。@OlegEstekhin如果能更好地记录这一点就好了。有时候,你不想创建一个新的maven项目;然后要让这个黑魔法正常工作就很难了。