如何包含基于体系结构的 Gradle 依赖项?

How do I include a Gradle dependency based on architecture?

我最近买了一台新的 M1 Macbook,并开始在应用程序启动时在 Netty 中看到 this stacktrace。推荐的解决方案是添加这个依赖:

runtimeOnly "io.netty:netty-resolver-dns-native-macos:4.1.75.Final:osx-aarch_64"

由于这是特定于 ARM64 的依赖项,考虑到我团队中的其他人拥有 x86 工作站并且最终将部署到基于 x86 的实例,将其添加到构建中似乎并不正确。我只在执行 run 任务时真正需要这个依赖,那么当它在 ARM64 机器上执行时我如何选择性地包含它?

似乎需要自定义 Gradle 配置,但我不知道如何根据体系结构自动包含它。

在你的build.gradle中你可以定义

ext.osArch = System.getProperty("os.arch") //return `x86_64` or ..
ext.osNameSP = System.getProperty("os.name") //return `Mac OS X` or ..
ext.osName = "Mac OS X" == osNameSP ? "osx" : "none"
ext.osClass = "${osName}_$osArch"

//construct the string for dependency
ext.depString = "io.netty:netty-resolver-dns-native-macos:4.1.75.Final"
ext.depStringFinal = "osx_x86_64" == osClass ? "$depString:$osClass" : depString
println "$osClass | $depString | $depStringFinal"

//apply in dependency
dependencies {
    implementation "$depStringFinal"
}