Skip to content

Instantly share code, notes, and snippets.

@jonatan-ivanov
Created February 11, 2026 00:39
Show Gist options
  • Select an option

  • Save jonatan-ivanov/3159bee14b961eb33c7da3ea9cd43e58 to your computer and use it in GitHub Desktop.

Select an option

Save jonatan-ivanov/3159bee14b961eb33c7da3ea9cd43e58 to your computer and use it in GitHub Desktop.
"local" toolchains
# $HOME/.gradle/jdks
# https://api.foojay.io/swagger-ui/
# https://api.foojay.io/disco/v3.0/packages?version=25&distribution=liberica&architecture=aarch64&archive_type=tar.gz&package_type=jdk&operating_system=macos&javafx_bundled=false
toolchains.local.JDK23.AARCH64.MAC_OS=https://github.com/bell-sw/Liberica/releases/download/23+38/bellsoft-jdk23+38-macos-aarch64.tar.gz
toolchains.local.JDK25.AARCH64.MAC_OS=https://github.com/bell-sw/Liberica/releases/download/25+37/bellsoft-jdk25+37-macos-aarch64.tar.gz
rootProject.name = 'gradle-test'
public abstract class LocalJavaToolchainResolver implements JavaToolchainResolver {
private static final Logger logger = Logging.getLogger(LocalJavaToolchainResolver.class)
public java.util.Optional<JavaToolchainDownload> resolve(JavaToolchainRequest request) {
String key = getKey(request)
String uri = loadLocalToolChainProperties()[key]
logger.quiet("Resolved Toolchain: $key -> $uri")
return java.util.Optional.ofNullable(uri).collect{ JavaToolchainDownload.fromUri(new URI(it)) }
}
private String getKey(JavaToolchainRequest request) {
String version = request.javaToolchainSpec.languageVersion.get()
String arch = request.buildPlatform.architecture
String os = request.buildPlatform.operatingSystem
return "toolchains.local.JDK${version}.${arch}.${os}"
}
private Map loadLocalToolChainProperties() {
Properties gradleProperties = new Properties()
new File('gradle.properties').withInputStream { gradleProperties.load(it) }
return gradleProperties.findAll { it.key.startsWith('toolchains.local.') }
}
}
public abstract class LocalJavaToolchainResolverPlugin implements Plugin<Settings> {
@Inject
protected abstract JavaToolchainResolverRegistry getToolchainResolverRegistry();
public void apply(Settings settings) {
settings.getPluginManager().apply("jvm-toolchain-management")
getToolchainResolverRegistry().register(LocalJavaToolchainResolver.class)
}
}
apply plugin: LocalJavaToolchainResolverPlugin
toolchainManagement {
jvm {
javaRepositories {
repository('local') { resolverClass = LocalJavaToolchainResolver }
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment