如何包含基于体系结构的 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"
}
我最近买了一台新的 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"
}