在 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 的,因为 JavaToolchainResolver 是 build 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 ,这使得注册的工具链仓库可从构建中使用。 |