2016-11-23 53 views
0

我很想篩選我的gradle項目中的特定java資源。如果某些文件只應該替換內容,則應該重新命名一些文件(並且替換不同的內容)。gradle process具有不同替換和重命名規則的資源

我gradle這個Java項目的設置是:

> cat build.gradle 
apply plugin: 'java' 
sourceSets { 
    main { 
     java { 
      resources { 
       srcDirs = [ "foo" ] 
       include '**/**' 
      } 
     }  
    } 
} 

processResources { 
    include '**/file_a.txt' 
    filter { String line -> 
     line 
      .replace("foo", "fool") 
     } 
} 


processResources { 
    include '**/file_b.txt' 
    rename { "file_c.txt" } 
    filter { String line -> 
     line 
      .replace("ipsum", "zzz") 
     } 
}           

> cat foo/file_a.txt 
my name is foo 
test ipsum 

> cat foo/file_b.txt 
lorem ipsum ... 

一旦運行:

gradle這個建立

我得到:

> ls build/resources/main 
file_c.txt 

> cat build/resources/main/file_c.txt 
my name is fool 
test zzz 

但是我LIK e以獲得這兩個文件,其中只有file_b.txt將被重命名,並且兩個文件將被特定規則取代。什麼是實現這一目標的正確途徑?

回答

0

OK,找到了解決辦法嘍,下面似乎是按預期工作:

apply plugin: 'java' 
sourceSets { 
    main { 
     java { 
      resources { 
       srcDirs = [ "foo" ] 
       include '**/**' 
       exclude '**/*.txt' 
      } 
     }  
    } 
} 

processResources { 
    with copySpec { 
     from 'foo/file_a.txt' 
     filter { String line -> 
      line 
       .replace("foo", "fool") 
      } 
    } 

    with copySpec { 
     from 'foo/file_b.txt' 
     rename { "file_c.txt" } 
     filter { String line -> 
      line 
       .replace("ipsum", "zzz") 
      } 
    } 
} 
0

我個人認爲資源和過濾資源應該保持獨立。即src/main/resourcessrc/main/filteredResources。我也件事你應該避免不包括(例如exclude '**/*.txt'resourcesfilteredResources目錄中只應包含哪些將在罐子結束了......沒有別的

import org.apache.tools.ant.filters.ReplaceTokens 

processResources { 
    with copySpec { 
     from 'src/main/filteredResources' 
     filter(ReplaceTokens, tokens: [foo: 'fool', ipsum: 'zzz']) 
    } 
} 

上面的代碼將取代中的所有文件@[email protected]@[email protected]src/main/filteredResources文件夾

+0

嗯,我明白了你的觀點,但是我處於一種情況,我需要在特定文件中過濾特定的東西,此外,我需要重新命名特定的文件 –

+0

公平的......我沒有充分了解你的用例。爲什麼不能將模板命名爲與目標文件完全相同?您是否考慮過使用[freemarker](http://freemarker.org/)或[velocity](https://velocity.apache.org/)等模板語言? –