Java(Maven)项目中基准测试代码的存放位置及保留规范咨询
Maven基准测试代码的留存与存放方案
要不要保留基准测试代码?
必须留。基准测试代码是跟踪代码性能变化、验证优化效果的核心依据——后续迭代时,你可以快速复用这些代码验证新改动的性能影响,避免重复造轮子;团队协作时,也能让其他人直观看到某段代码的性能基线,防止无意识的性能退化。
Maven中基准测试的存放约定
Maven官方没有强制的专属benchmark目录,但行业有几种主流的落地方案:
方案1:复用现有test目录,通过子包区分
直接把基准测试代码放在src/test/java下的独立子包(比如com.yourproject.benchmark),这种方式不用额外配置Maven,完全兼容现有构建流程。
- 注意点:要和普通单元测试做区分,比如用JMH的
@Benchmark注解标记,或者通过Maven Profile配置,只在需要时单独执行基准测试(避免跑单元测试时顺带执行耗时的基准测试)。
方案2:自定义基准测试源码目录
如果想和普通测试代码完全隔离,可以在项目根目录新增src/benchmark/java和src/benchmark/resources目录,然后在pom.xml中配置Maven的构建规则,示例配置如下:
<build> <plugins> <!-- 配置JMH插件编译基准测试代码 --> <plugin> <groupId>org.openjdk.jmh</groupId> <artifactId>jmh-maven-plugin</artifactId> <version>1.37</version> <executions> <execution> <goals> <goal>compile</goal> <goal>run</goal> </goals> </execution> </executions> </plugin> <!-- 把自定义目录加入源码路径 --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>add-benchmark-source</id> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>src/benchmark/java</source> </sources> </configuration> </execution> </executions> </plugin> </plugins> </build>
方案3:独立成Maven模块
如果基准测试依赖特殊环境、或者需要单独打包分发,可以把它做成项目的一个独立模块(比如your-project-benchmark),模块内可以复用上述任意一种存放方式,这种方案的隔离性最好,适合大型项目。
额外实用建议
- 优先用JMH这类成熟的基准测试框架,避免自己实现的测试逻辑有性能偏差;
- 给每个基准测试用例添加清晰的注释,说明测试场景、预期性能指标;
- 配置Maven Profile,比如新增
benchmarkprofile,只有执行mvn clean install -P benchmark时才会运行基准测试,不影响日常构建效率。
内容的提问来源于stack exchange,提问作者Teddy Tsai
相关产品推荐
相关产品推荐

