JMH无法在Java模块内运行(无法找到资源:/META-INF/BenchmarkList)。

4
我接手了一个使用maven-surefire-plugin(自动化测试)来触发JMH基准测试的项目,并在其中添加了module-info.java。现在,META-INF / BenchmarkList不再生成(实际上,整个目录都已经缺失),因此在启动基准测试时会出现以下错误:

ERROR:无法找到资源:/ META-INF / BenchmarkList

我怀疑Java模块正在阻止注释处理器正常运行,但我无法弄清楚如何修复它。有什么想法吗?


通常情况下,如果问题没有提供 MCVE,那么很难找出错误或其原因。只是分享一下,因为问题以 maven-surefire 开始,而答案则以 maven-compiler 结束。 - Naman
1个回答

17

我通过试错找到了答案。这似乎是maven-compiler-plugin 3.8.0中的一个bug(或“feature”)。当module-info.java存在时,JMH注解处理器不再自动选择。为我添加此配置解决了问题:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
    [...]
        <annotationProcessorPaths>
            <path>
                <groupId>org.openjdk.jmh</groupId>
                <artifactId>jmh-generator-annprocess</artifactId>
                <version>${jmh.version}</version>
            </path>
        </annotationProcessorPaths>
    [...]
    </configuration>
</plugin>

更新: 我提交了一个错误报告,报告对象为maven-compiler-plugin。


1
在我执行了mvn clean install之后,也对我起作用了。 - Laguh
jmh.version 的值是多少? - Liz Lamperouge
@LizLamperouge 无论您想使用哪个版本的JMH。 - Gili

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接