2024-07-29
一言
燐灯三千燃长夜,烛照天门千山雪。 --- 《烛火千年》 · 烛火千年
Gradle插件
org.gradle.toolchains.foojay-resolver-convention
org.gradle.toolchains.foojay-resolver-convention
插件是 Gradle 提供的一个插件,用于简化 Java 工具链的解析和配置。该插件利用 Foojay(Friends of OpenJDK)提供的服务,自动解析和下载所需的 JDK 版本,从而简化项目的 Java 环境配置。
插件工作原理
- 工具链配置:在
build.gradle
文件中指定所需的 Java 版本和供应商。 - 自动下载:当构建过程中发现本地没有指定的 JDK 时,插件会自动从 Foojay 服务下载对应的 JDK。
- 环境配置:下载完成后,插件会自动配置下载的 JDK 以供项目使用。
使用示例
以下是一个示例配置,展示了如何使用该插件自动解析和下载 JDK:
plugins {
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0'
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17) // 指定需要的 Java 版本
}
}
tasks.withType(JavaCompile).configureEach {
javaCompiler = javaToolchains.compilerFor {
languageVersion = JavaLanguageVersion.of(17)
}
}
示例说明
- 插件声明:在
plugins
块中声明org.gradle.toolchains.foojay-resolver-convention
插件。 - 工具链配置:在
java
块中配置所需的 Java 版本,这里指定使用 Java 17。 - 任务配置:为所有
JavaCompile
任务指定使用自动解析的 Java 编译器。
测试自动下载功能
你可以尝试在一个没有预先安装指定 JDK 的环境中运行以下命令,以测试插件的自动下载和配置功能:
./gradlew compileJava
在构建过程中,Gradle 会自动检查本地是否 有符合要求的 JDK,如果没有,插件会自动下载并配置。
更多配置选项
你还可以配置更多选项,例如指定 JDK 供应商:
java {
toolchain {
languageVersion = JavaLanguageVersion.of(11)
vendor = JvmVendorSpec.ADOPTIUM // 指定 JDK 供应商为 Adoptium
}
}
通过这种方式,你可以确保所有开发和构建环境使用相同的 JDK 版本和供应商,减少环境差异带来的问题。如果你有其他问题或需要进一步的帮助,请告诉我!
参考文档
可以参考 Gradle 官方文档 和 Foojay 官方网站 了解更多关于 Java 工具链和 Foojay 服务的信息。
gradle强制特定依赖版本
这段代码的作用是通过配置 Gradle 的依赖解析策略来强制特定依赖的版本。具体来说,它针对 jakarta.xml.bind:jakarta.xml.bind-api
依赖,将其版本强制设为 3.0.1
。以下是对这段代码的详细解释:
配置详解
configurations.all { Configuration c ->
c.resolutionStrategy.eachDependency { DependencyResolveDetails details ->
if (details.requested.group == 'jakarta.xml.bind' && details.requested.name == 'jakarta.xml.bind-api') {
details.useVersion '3.0.1'
}
}
}
主要作用
- 遍历所有配置:
configurations.all
会遍历项目中所有的配置(如compileClasspath
、runtimeClasspath
等)。 - 设置解析策略:
c.resolutionStrategy.eachDependency
为每个依赖配置一个解析策略。 - 检查依赖:
DependencyResolveDetails
对象包含关于当前依赖的信息,通过details.requested.group
和details.requested.name
可以获取依赖的 group 和 name。 - 强制使用特定版本:通过
details.useVersion '3.0.1'
,将jakarta.xml.bind:jakarta.xml.bind-api
依赖的版本强制设置为3.0.1
。
示例解释
configurations.all { Configuration c -> ... }
:对所有配置应用相同的依赖解析策略。c.resolutionStrategy.eachDependency { DependencyResolveDetails details -> ... }
:为每个依赖配置一个解析策略。if (details.requested.group == 'jakarta.xml.bind' && details.requested.name == 'jakarta.xml.bind-api') { ... }
:检查当前解析的依赖是否是jakarta.xml.bind:jakarta.xml.bind-api
。details.useVersion '3.0.1'
:将匹配的依赖版本强制设置为3.0.1
。