写入文件的Gradle任务出现问题

写入文件的Gradle任务出现问题,gradle,android-studio,android-gradle-plugin,Gradle,Android Studio,Android Gradle Plugin,我正在开发一个Android应用程序,其中有一个JSON文件目录,我想创建一个gradle任务,将所有这些文件合并成一个JSON文件 这是我到目前为止完成的gradle任务,但没有创建文件: // Task that combines all JSON files in ../libraries into src/main/res/raw/libraries.json task combineJSonFiles { String content = "" FileTree tre

我正在开发一个Android应用程序,其中有一个JSON文件目录,我想创建一个gradle任务,将所有这些文件合并成一个JSON文件

这是我到目前为止完成的gradle任务,但没有创建文件:

// Task that combines all JSON files in ../libraries into src/main/res/raw/libraries.json
task combineJSonFiles {
    String content = ""
    FileTree tree = fileTree(dir: '../libraries', include: '**/*.json')
    tree.each {File file ->
        content += file.getText()
    }

    println "[" + content.substring(0, content.length()-1) + "]" // prints out the correct contents
    File libraries = file("../app/src/main/res/raw/libraries.json")
    println libraries.getProperties()
}
我打印出属性,但我不确定为什么这些是属性值:

{directory=false, canonicalFile=/Users/michaelcarrano/AndroidStudioProjects/detective_droid/app/src/main/res/raw/libraries.json, file=false, freeSpace=0, canonicalPath=/Users/michaelcarrano/AndroidStudioProjects/detective_droid/app/src/main/res/raw/libraries.json, usableSpace=0, hidden=false, totalSpace=0, path=/Users/michaelcarrano/AndroidStudioProjects/detective_droid/app/src/main/res/raw/libraries.json, name=libraries.json, prefixLength=1, absolute=true, class=class java.io.File, parentFile=/Users/michaelcarrano/AndroidStudioProjects/detective_droid/app/src/main/res/raw, absolutePath=/Users/michaelcarrano/AndroidStudioProjects/detective_droid/app/src/main/res/raw/libraries.json, absoluteFile=/Users/michaelcarrano/AndroidStudioProjects/detective_droid/app/src/main/res/raw/libraries.json, parent=/Users/michaelcarrano/AndroidStudioProjects/detective_droid/app/src/main/res/raw}

任何帮助都是非常感谢的,因为即使在阅读了文档之后,我似乎还没有弄明白这一点

在Groovy/java中创建java.io.File的实例不会在磁盘上创建该文件。你需要给它写点什么。在Groovy中使用文件时,请查看此文件


此外,您还将任务实现放在任务配置块中,而不是任务操作中。这意味着您的代码将不会在您期望的时间运行-它将在每次运行gradle时运行,而不是在您运行此任务时运行。您需要将您的代码放入
doLast
块中

我只是发布了现在可以工作的任务的代码:

task combineJSonFiles {
    String content = ""
    FileTree tree = fileTree(dir: '../libraries', include: '**/*.json')
    tree.each {File file ->
        content += file.getText()
    }
    def libraries = new File("app/src/main/res/raw/libraries.json")
    libraries.text = "[" + content.substring(0, content.length()-1) + "]"
}

我的问题是试图使用Java.io.File,但为我的文件设置了错误的目录路径。

谢谢!我终于成功了,但我可以发誓我已经试过了。至于这个任务,我确实希望每次运行Gradle时都运行它,以确保我拥有最新版本的文件。如果您认为有更好的方法运行任务,请告诉我。目前,代码作为gradle配置阶段的一部分运行,与任务运行无关。我建议将代码放入doLast块,然后使用
dependsOn
确保任务在您希望的时间运行,您可能需要考虑声明任务的输入和输出,这样如果没有改变,它不会做不必要的工作。看看