2016-11-23 77 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/)等模板语言? –