2016-12-07 3 views
2

В настоящее время я работаю над проектом. Ресурсы для проекта содержат много json-файлов, все они попадают в финальную банку. Я уже обрабатываю resouces. Подобно переименованию файлов и замене некоторых строк в некоторых других файлах. Таким образом, задача processResources уже используется.gradle - Минимизировать ресурсы json в processResources

Теперь вопрос в том, как я мог бы расширить его, чтобы он минимизировал все файлы json. Так как у Groovy есть утилиты json, возможность получить содержимое файлов и их замену в месте назначения должна быть достаточной, чтобы все работало.

Это мой текущий processResources задача:

processResources { 
    // this will ensure that this task is redone when the versions change. 
    inputs.property "version", project.version 
    inputs.property "mcversion", project.minecraft.version 

    // replace stuff in mcmod.info, nothing else 
    from(sourceSets.main.resources.srcDirs) { 
     include "mcmod.info" 

     // replace version and mcversion 
     expand "version": project.version, "mcversion": project.minecraft.version 
    } 

    // Minify json resources 
    from(sourceSets.main.resources.srcDirs) { 
     include "**/*.json" 

     // Minify every file here 
    } 

    // copy everything else, thats not the mcmod.info 
    from(sourceSets.main.resources.srcDirs) { 
     exclude "mcmod.info" 
     exclude "**/*.json" 
    } 

    rename "(.+_at.cfg)", 'META-INF/$1' 

    from MainDirResources 
} 

Минимизация файлы должны работать с любым из следующих двух строк:

JsonOutput.toJson(new JsonSlurper().parseText(<file content here>)) 
JsonOutput.toJson(new JsonSlurper().parse(<file here>)) 

Так что я должен сделать, чтобы получить содержание все файлы или все экземпляры самих файлов и изменить их содержимое в выходном каталоге?

+0

Gradle может запускать исполняемый файл, вы можете написать сценарий оболочки, чтобы свести к минимуму файлы json (удалить новые строки), а затем выполнить его в своем скрипте gradle. –

+0

@AlecZhang Я бы хотел избежать использования оболочки, где могу. Также, как я сказал, минимизация самого JSON не должна быть сложной: http://groovy-lang.org/json.html – BrainStone

+0

Как вы собираетесь их минимизировать? –

ответ

2

Следующая делает трюк:

processResources { 
    // this will ensure that this task is redone when the versions change. 
    inputs.property "version", project.version 
    inputs.property "mcversion", project.minecraft.version 

    // replace stuff in mcmod.info, nothing else 
    from(sourceSets.main.resources.srcDirs) { 
     include "mcmod.info" 

     // replace version and mcversion 
     expand "version": project.version, "mcversion": project.minecraft.version 
    } 

    // copy everything else, thats not the mcmod.info 
    from(sourceSets.main.resources.srcDirs) { 
     exclude "mcmod.info" 
    } 

    from MainDirResources 

    rename "(.+_at.cfg)", 'META-INF/$1' 

    // Minify json resources 
    doLast { 
     fileTree(dir: outputs.files.asPath, include: "**/*.json").each { 
      File file -> file.text = JsonOutput.toJson(new JsonSlurper().parse(file)) 
     } 
    } 
} 

Поскольку outputs.files содержит только один реж (реж файлы копируются в) вы можете превратить его в дерево файлов и перебирать файлы и minize в json-файлы. Должен быть запущен как последняя операция в processResources, хотя

Смежные вопросы