在 Gradle 版本 7.6 以上,Gradle 提供一種方法,可以在外掛中定義 Java 工具鏈自動配置邏輯。此頁面說明如何撰寫工具鏈解析器外掛。有關工具鏈自動配置如何與這些外掛互動的詳細資訊,請參閱 工具鏈

提供下載 URI

工具鏈解析器外掛提供邏輯,將 工具鏈要求 對應到 下載回應。目前下載回應只包含下載 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建置服務。Gradle 會在執行階段為某些抽象方法提供動態實作。
2 對應方法傳回包在 Optional 中的下載回應。如果解析器實作無法提供相符的工具鏈,封裝的 Optional 會包含一個空值。

在外掛中註冊解析器

使用設定外掛 (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.getPlugins().apply("jvm-toolchain-management"); (3)

        JavaToolchainResolverRegistry registry = getToolchainResolverRegistry();
        registry.register(JavaToolchainResolverImplementation.class);
    }
}
1 此外掛程式使用屬性注入,因此它必須是abstract和設定外掛程式。
2 若要註冊解析器實作,請使用屬性注入來存取JavaToolchainResolverRegistry Gradle 服務。
3 解析器外掛程式必須套用jvm-toolchain-management基本外掛程式。這會動態將jvm區塊新增至toolchainManagement,這會讓註冊的工具鏈儲存庫可從建置中使用。