在 Gradle 7.6 及更高版本中,Gradle 提供了一种在插件中定义 Java 工具链自动配置逻辑的方法。 此页面解释了如何编写工具链解析器插件。 有关工具链自动配置如何与这些插件交互的详细信息,请参阅 Toolchains

提供下载 URI

工具链解析器插件提供逻辑,将 toolchain request 映射到 download response。 目前,下载响应仅包含下载 URL,但将来可能会扩展。

对于下载 URL,仅接受 https 等安全协议。 这是为了确保没有人可以篡改传输中的下载。

插件通过 JavaToolchainResolver 的实现提供映射逻辑

JavaToolchainResolverImplementation.java
public abstract class JavaToolchainResolverImplementation
        implements JavaToolchainResolver { (1)

    public Optional<JavaToolchainDownload> resolve(JavaToolchainRequest request) { (2)
        return Optional.empty(); // custom mapping logic goes here instead
    }
}
1 此类是 abstract 的,因为 JavaToolchainResolverbuild service。 Gradle 在运行时为某些抽象方法提供动态实现。
2 映射方法返回包装在 Optional 中的下载响应。 如果解析器实现无法提供匹配的工具链,则封闭的 Optional 包含一个空值。

在插件中注册解析器

使用 settings 插件 (Plugin<Settings>) 注册 JavaToolchainResolver 实现

JavaToolchainResolverPlugin.java
public abstract class JavaToolchainResolverPlugin implements Plugin<Settings> { (1)
    @Inject
    protected abstract JavaToolchainResolverRegistry getToolchainResolverRegistry(); (2)

    public void apply(Settings settings) {
        settings.getPluginManager().apply("jvm-toolchain-management"); (3)

        JavaToolchainResolverRegistry registry = getToolchainResolverRegistry();
        registry.register(JavaToolchainResolverImplementation.class);
    }
}
1 该插件使用 property injection,因此它必须是 abstract 和 settings 插件。
2 要注册解析器实现,请使用 property injection 访问 JavaToolchainResolverRegistry Gradle 服务。
3 解析器插件必须应用 jvm-toolchain-management 基础插件。 这会将 jvm 块动态添加到 toolchainManagement,这使得注册的工具链仓库可从构建中使用。