You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为JMH基准测试添加项目依赖的外部JAR包?

在JMH中引入外部JAR依赖的正确姿势

嘿,我来帮你解决这个JMH基准测试时引入外部JAR的问题——我之前也踩过-cp参数的坑,咱们一步步捋清楚可行的方案:

推荐方案:用构建工具(Maven/Gradle)管理依赖

这是最省心的方式,构建工具会自动帮你处理类路径和依赖打包,避免手动配置出错。

Maven示例

  1. 首先在你的pom.xml中添加JMH核心依赖、插件以及外部JAR依赖:
<dependencies>
    <!-- JMH核心依赖 -->
    <dependency>
        <groupId>org.openjdk.jmh</groupId>
        <artifactId>jmh-core</artifactId>
        <version>1.37</version>
    </dependency>
    <dependency>
        <groupId>org.openjdk.jmh</groupId>
        <artifactId>jmh-generator-annprocess</artifactId>
        <version>1.37</version>
        <scope>provided</scope>
    </dependency>
    <!-- 你的外部JAR依赖(本地JAR可使用system scope,或先install到本地仓库) -->
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>your-external-lib</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>${project.basedir}/lib/your-external-lib.jar</systemPath>
    </dependency>
</dependencies>

<build>
    <plugins>
        <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>
    </plugins>
</build>
  1. 运行mvn jmh:run,插件会自动把所有依赖(包括你的外部JAR)加入类路径,直接执行基准测试。

Gradle示例

在build.gradle中配置JMH插件和依赖:

plugins {
    id 'java'
    id 'me.champeau.jmh' version '0.6.7'
}

dependencies {
    jmh 'org.openjdk.jmh:jmh-core:1.37'
    jmh 'org.openjdk.jmh:jmh-generator-annprocess:1.37'
    // 你的外部JAR依赖
    implementation files('lib/your-external-lib.jar')
}

运行./gradlew jmh即可,Gradle会自动处理类路径。

手动命令行方案:正确配置-cp参数

如果你必须手动用命令行执行,之前的类找不到错误大概率是因为类路径没写全——你需要把JMH核心JAR、项目编译后的class文件、所有外部依赖JAR都加入类路径。

正确命令格式(Linux/macOS)

java -cp "jmh-core-1.37.jar:jmh-generator-annprocess-1.37.jar:target/classes/:lib/external-lib1.jar:lib/external-lib2.jar" org.openjdk.jmh.Main YourBenchmarkClass

正确命令格式(Windows)

java -cp "jmh-core-1.37.jar;jmh-generator-annprocess-1.37.jar;target\classes\;lib\external-lib1.jar;lib\external-lib2.jar" org.openjdk.jmh.Main YourBenchmarkClass

关键注意点:

  • 路径分隔符:Linux/macOS用:,Windows用;,不要混用
  • 必须包含JMH的两个核心JAR(jmh-core和jmh-generator-annprocess)
  • 要加入你的项目编译后的class文件目录(比如target/classes)或者项目JAR
  • 所有外部依赖JAR的路径要准确,多个JAR需逐个列出来

备选方案:打包成Fat Jar(可执行JAR)

把JMH、你的项目代码、所有外部依赖打包成一个单独的可执行JAR,这样运行时不用配置复杂的类路径。

用Maven的Shade插件或者Gradle的Shadow插件就能实现,打包后直接运行:

java -jar your-benchmark-fat.jar

常见坑点排查

  • 检查JMH版本和Java版本兼容性:JMH 1.37+要求Java 8及以上
  • 确保外部JAR没有损坏,类名拼写正确
  • 避免类路径中出现重复的类(比如不同版本的同一依赖)

内容的提问来源于stack exchange,提问作者bergtwvd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:12:17