【问题标题】:How do I include a Gradle dependency based on architecture?如何包含基于架构的 Gradle 依赖项?
【发布时间】:2022-09-28 13:21:28
【问题描述】:

我最近买了一台新的 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 配置,但我不知道如何根据体系结构自动包含它。

    标签: gradle netty apple-m1 arm64


    【解决方案1】:

    在你的 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"
    }
    

    【讨论】:

    • 我将如何使用此属性来选择性地加载额外的运行时依赖项?
    【解决方案2】:

    在您的build.gradle 文件中,您可以添加基于操作系统架构的依赖项。

    import org.apache.tools.ant.taskdefs.condition.Os
    ...
    dependencies {
        if (Os.isArch("aarch_64")) {
            runtimeOnly "io.netty:netty-resolver-dns-native-macos:4.1.75.Final:osx-aarch_64"
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-24
      • 1970-01-01
      相关资源
      最近更新 更多