2015-10-20 99 views
2

我目前有一組文件,其中包含需要在複製到目標構建目錄之前解析並轉換爲XML的DSL。Gradle Zip任務:複製時替換整個文件內容

我使用eachFile掛鉤做到這一點,但是當我替換該文件的內容的源文件時,也改變了:

task build(type: Zip) { 
    with { 
    archiveName = "${project.name}-${project.version}.${extension}" 
    destinationDir = buildDir 
    } 

    from('workflow/dsl') { 
    eachFile { fileDetails -> 
     String xml = new OozieDslParser().parse(fileDetails.getFile()) 
     fileDetails.setName(fileDetails.getName().replaceFirst(~/\.[^\.]+$/, '.xml') 
     fileDetails.getFile().text = xml //This changes the source file as well. 
    } 
    } 

    from('workflow/resources') 
} 

什麼是解決這個問題的最好方法是什麼?

不幸的是,「擴展」和「過濾器」選項似乎不起作用,因爲前者只是擴展屬性,後者只給我一條線。

謝謝!

回答

1

我使用自定義FilterReader來解決這個問題:

class OozieDslFilter extends FilterReader { 
    OozieDslFilter(Reader input) { 
    super(new StringReader(new OozieDslParser().parse(input.text))) 
    } 
} 

task build(type: Zip) { 
    with { 
    archiveName = "${project.name}-${project.version}.${extension}" 
    destinationDir = buildDir 
    } 

    from('workflow/resources') 

    from('workflow/dsl') { 
    rename { it - ~/\.[^\.]+$/ + '.xml' } 
    filter(OozieDslFilter) 
    } 
}