Java &引用;没有匹配的基准”;在eclipse中从main运行JMH时

Java &引用;没有匹配的基准”;在eclipse中从main运行JMH时,java,eclipse,benchmarking,jmh,Java,Eclipse,Benchmarking,Jmh,我想通过在eclipse中将JMH作为Java应用程序运行来尝试它的新特性。我导入并构建了jmh示例项目。编译后的类以/jmh samples/target/generated sources/annotations结尾,在/target/中有几个jar,从命令行运行microbenchmarks.jar可以正常工作 然而,当我执行main时,我总是得到 No matching benchmarks. Miss-spelled regexp? 有什么想法吗?我使用的是0.3版,这是一种更好的与

我想通过在eclipse中将JMH作为Java应用程序运行来尝试它的新特性。我导入并构建了jmh示例项目。编译后的类以/jmh samples/target/generated sources/annotations结尾,在/target/中有几个jar,从命令行运行microbenchmarks.jar可以正常工作

然而,当我执行main时,我总是得到

No matching benchmarks. Miss-spelled regexp?
有什么想法吗?我使用的是0.3版,这是一种更好的与开发人员沟通的方式

有几件事可以尝试:

  • 劫持
    Main
    可能不是个好主意。改用JavaAPI
  • 使用
    -v extra
    调试模式匹配:要么过滤器regexp不正确,要么没有要运行的基准
  • 如果regexp不正确,请修复它
  • 如果没有可匹配的基准,则有可能未正确生成和/或提取资源。确保类路径上也有
    target/classes/

  • 好的,看来默认情况下jmh在META-INF/Microbenchmarks下查找生成的类,maven build将其放在项目的根目录下。然而,eclipse项目的根不在类路径上,所以在IDE中执行它会导致“找不到基准”

    我按如下方式运行它:

  • mvn清洁包(使用外部maven安装,而非embded 月食中)
  • 右键单击jmh示例项目,选择“构建” 路径->用作源文件夹“
  • 现在,您可以在eclipse中以Java应用程序的形式运行来自jmh示例的任何基准测试

  • 另一方面,在Problems视图中会出现1000多个“错误”,因为eclipse会与自动生成的文件相混淆,但至少它是有效的。

    我也面临同样的问题,我遵循了教程。这就解决了问题

    以下是我采取的步骤:

    • 我使用AS-IS来理解它是如何工作的

    • 然后我就做了mvn清理和安装

    • 我看到所有的类都是在
      target->annotations->->generated
    • 然后,我运行了
      BenchmarkRunner main()
      类,结果成功了

    我不是在用main做任何事情,而是在运行您链接的代码(JMHSample_01_HelloWorld.java)。。。目标/类位于类路径上。然而,当调试jmh核心代码时,我看到它试图从项目根目录下的META-INF/微基准中获取类,而不是在目标/类中…我添加了
    jmh样本/target/生成的源代码/注释
    jmh样本/target/classes
    作为源文件夹,它对我有效,没有任何错误。自动生成的文件没有问题;它们是正确的Java源代码(有数千条警告,但没有错误),实际上是在基准测试中运行的东西。
    target/classes
    默认在类路径上,添加
    jmh示例/target/generated sources/annotation
    不会给你任何东西,因为这不是org.openjdk.jmh.Main查找基准类的位置。检查org.openjdk.jmh.runner.MicroBenchmarkList.MICROBENCHMARK_LIST的值“不会给你任何东西”-除非没有它,我会得到由
    ClassNotFoundException
    引起的“MICROBENCHMARK不匹配类”。同意,MICROBENCHMARK\u列表不需要它。你可能是对的。不知怎的,我在没有它的情况下运行它,但是有上面所有的问题。而且你的配置不起作用。现在,为了证明我的观点,我删除并删除了这个项目,重新导入并重新构建了它,然后它突然按照预期工作……欢迎提供指向解决方案的链接,但请确保您的答案在没有它的情况下是有用的:这样您的其他用户就会知道它是什么以及它为什么存在,然后引用你链接到的页面最相关的部分,以防目标页面不可用。谢谢@Das_Geek。我更新了答案以添加更多内容。希望这能增加一点相关性。没问题!感谢您花时间改进您的答案。