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

是否存在为缺失Gradle/Maven依赖生成Java Stub/API JAR的编译工具?

当然有啦!这类工具还真不少,专门解决你这种「依赖拿不到但要先编译」的场景。我给你列几个常用的方案,分Gradle、Maven和通用工具三类:

Gradle专用:gradle-stub-plugin

这个插件是Gradle项目的首选,配置简单,能自动帮你生成目标依赖的Stub JAR。

  • 首先在build.gradle里引入插件并配置缺失的依赖坐标:
plugins {
    id 'com.github.johnrengelman.stub' version '1.0.0'
}

stub {
    dependencies {
        // 替换成你缺失的依赖坐标
        stub 'com.example:your-missing-dependency:1.0.0'
    }
}
  • 执行命令生成Stub:
gradle generateStubs

生成的Stub JAR会自动被加入编译类路径,项目就能正常编译了。

Maven专用:Maven Stub Plugin

针对Maven项目,也有官方生态的插件可以用:

  • 在pom.xml中添加插件配置:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-stub-plugin</artifactId>
    <version>1.0</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <dependencies>
                    <dependency>
                        <!-- 替换成你的缺失依赖 -->
                        <groupId>com.example</groupId>
                        <artifactId>your-missing-dependency</artifactId>
                        <version>1.0.0</version>
                    </dependency>
                </dependencies>
            </configuration>
        </execution>
    </executions>
</plugin>
  • 运行生成命令:
mvn stub:generate

生成的Stub会被Maven自动识别为编译依赖。

通用灵活方案:Byte Buddy

如果需要对Stub的生成逻辑有更细的控制(比如让方法返回默认值、自定义空实现),Byte Buddy是个不错的选择。你可以写个简单的Java脚本生成Stub类,再打包成JAR:

import net.bytebuddy.ByteBuddy;
import net.bytebuddy.description.modifier.Visibility;
import net.bytebuddy.implementation.StubMethod;

import java.io.File;
import java.io.IOException;

public class StubGenerator {
    public static void main(String[] args) throws IOException {
        // 生成一个名为com.example.MissingClass的Stub类
        var dynamicType = new ByteBuddy()
                .subclass(Object.class)
                .name("com.example.MissingClass")
                .defineMethod("yourMethod", String.class, Visibility.PUBLIC)
                .intercept(StubMethod.INSTANCE) // 生成空实现
                .make();
        
        // 把生成的类保存到目录
        dynamicType.saveIn(new File("stub-output"));
        // 之后用jar命令打包:jar cvf stub.jar -C stub-output/ .
    }
}

极简手动方案

如果缺失的依赖API很少,直接手动写空实现的类/接口,然后用jar命令打包:

# 假设你的Stub类都在stub-classes目录下
jar cvf missing-dependency-stub.jar -C stub-classes/ .

之后把这个JAR添加到项目的编译依赖中即可。

⚠️ 注意:所有Stub JAR都只能用于编译阶段,运行时必须替换成真实的依赖JAR,否则会抛出NoClassDefFoundError或AbstractMethodError哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:01:48