2015-04-17 3 views
4

Есть ли простой способ объединить несколько текстовых файлов в один в Gradle? Сценарий сборки должен выглядеть примерно так:Как объединить несколько файлов в Gradle?

FileCollection jsDeps = files(
    'file1.js', 
    'file2.js' 
    // other files here 
) 

task concatenate << { 
    // concatenate the files to file.js 
} 

Я использую Gradle 2.3.

ответ

2
(new File('test.js')).text = file('test1.js').getText() + file('test2.js').getText() 

UPDATE:

Для коллекций.

(new File('test.js')).text = files('test1.js', 'test2.js').collect{it.getText()}.join("\n") 
+0

Что делать, если коллекция файлов не исправлена? – Opal

+0

Хорошо. Ты прав. Возможно, я пропустил проблему. Возникает вопрос, как зацикливать файлы или как конкатенировать? – CyberAleks

+0

OP не уточнил его правильно, однако вы можете предоставить решение, которое объединит коллекцию файлов. – Opal

3

Следующая задача должна сделать работу:

task concatenate << { 
    def toConcatenate = files('f1', 'f2', 'f3') 
    def output = new File('output') 
    toConcatenate.each { f -> output << f.text } 
} 
+0

будет добавлен в существующий файл. Можете сначала удалить файл. – user2543253

2

leftShift/"< <" устарел в Gradle 3.4 Вы можете использовать что-то вроде:

task concatenate { 
    doLast { 
     def toConcatenate = files("filename1", "filename2", ...) 
     def outputFileName = "output.txt" 
     def output = new File(outputFileName) 
     output.write('') // truncate output if needed 
     toConcatenate.each { f -> output << f.text } 
    } 
0

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

что-то вроде этого:

task 'concatenateFiles', { 
    inputs.files(fileTree("path/to/dir/with/files")).skipWhenEmpty() 
    outputs.file("$project.buildDir/tmp/concatinated.js") 
    doLast { 
     outputs.files.singleFile.withOutputStream { out -> 
      for (file in inputs.files) file.withInputStream { out << it << '\n' } 
     } 
    } 
} 

Вместо дереве файлов, он также может быть заменен с выходом sourceset/sourceset, конкретные файлы, выходы из другой задачи и т.д.

Gradle doc on task inputs/output

Concatenating files in groovy

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