在构建之前从 build.gradle 中的人工制品中检索 android colors.xml

Retrieving an android colors.xml from artifactory in build.gradle before building

我是 gradle 脚本编写的新手,我正在尝试做一些简单的事情。在压缩包内的人工仓库中有一个 android colors.xml。我想要做的就是配置 gradle 以便在构建之前从 repo 获取该文件(如果它已更改)并将其复制到我的 android 模块的 res/values/colors.xml.我可以在命令行上使用 npm install 来做到这一点,但不知道如何从 build.gradle 中 运行。我的第一个尝试是在我模块的 build.gradle.

task getResourceTokens(type: Exec) {
    workingDir "/Users/cbattle/Dev/DesignTokenTest"
    executable 'npm'
    args = ['install https://artifactory-lvs.corpzone.internalzone.com/artifactory/.../token-tester-0.0.7.tgz']
    doLast {
        println "Executed!"
    }
}

task copyFiles(type: Copy) {
    from '/Users/cbattle/node_modules/.../colors.xml'
    into '/Users/cbattle/Dev/DesignTokenTest/atoms/src/main/res/values'
}

copyFiles.dependsOn(getResourceTokens)
preBuild.dependsOn(copyFiles)

这失败了

Execution failed for task ':atoms:getResourceTokens'.
> Process 'command 'npm'' finished with non-zero exit value 1

我的 .npmrc 文件中有正确的凭据。如果我只是手动使用命令行,它就可以工作。不清楚为什么会失败。

我还安装了 https://github.com/node-gradle/gradle-node-plugin,因此可以改用它。但以上应该有效。有什么想法吗?

谢谢

我明白了。无论出于何种原因,Exec 任务似乎都无法 运行 npm。相反,我安装了方便的 NodePlugin 并使用了它。

task getTokens(type: NpmTask) {
    args = ['install', 'https://artifactory-lvs.corpzone.internalzone.com/artifactory/.../token-tester-0.0.7.tgz']
}

太棒了!