Программно создать файл в скрипте сборки Gradle - PullRequest
0 голосов
/ 24 октября 2018

Я уверен, что это тривиально, но я не могу найти способ сделать это ...

В моем build.gradle я хочу создать processResources задачу (не например, скопировать или заполнить некоторый шаблон)) файл ресурсов для загрузки программой Java.

Я достиг следующего:

processResources {
    ...

    // This is a collection of files I want to copy into resources.
    def extra = configurations.extra.filter { file -> file.isFile () }

    // This actually copies them to 'classes/extra'. It works.
    into ('extra') {
        from extra
    }

    doLast {
        // I want to write this string (list of filenames, one per
        // line) to 'classes/extra/list.txt'.
        println extra.files.collect { file -> file.name }.join ("\n")
    }
}

Вы можете увидеть выше println, который печатает именно то, что мне нужно.Но как мне записать эту строку в файл вместо консоли?

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Один из способов реализовать это - определить пользовательскую задачу, которая сгенерирует этот «индексный» файл из конфигурации extra , и сделать существующую задачу processResources зависимой от этой пользовательской задачи.

Нечто подобное будет работать:

// Task that creates the index file which lists all extra libs
task createExtraFilesIndex(){
    // destination directory for the index file
    def indexFileDir = "$buildDir/resources/main"
    // index filename
    def indexFileName = "extra-libs.index"
    doLast{
        file(indexFileDir).mkdirs()
        def extraFiles = configurations.extra.filter { file -> file.isFile () }
        // Groovy concise syntax for writing into file; maybe you want to delete this file first.
        file( "$indexFileDir/$indexFileName") << extraFiles.files.collect { file -> file.name }.join ("\n")
    }
}

// make  processResources depends on createExtraFilesIndex task
processResources.dependsOn createExtraFilesIndex
0 голосов
/ 24 октября 2018

Вы можете использовать следующий код

task writeToFile {
  // sample list.(you already have it as extra.files.collect { file -> file.name })
  List<String> sample = [ 'line1','line2','line3' ] as String[]  
  // create the folders if it does not exist.(otherwise it will throw exception)
  File extraFolder = new File( "${project.buildDir}/classes/extra")
  if( !extraFolder.exists() ) {
    extraFolder.mkdirs()
  }
  // create the file and write text to it.
  new File("${project.buildDir}/classes/extra/list.txt").text = sample.join ("\n")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...