2015-10-26 32 views
0

Gradle 2.5Gradle:排除汇编中不同的资源文件

我有几个资源包文件。其中一些我想从打包在目标jar文件中的beeing中排除,因为它们不包含尚未授权的翻译。

根据文档和例子,我发现我有这样的指令:

sourceSets { 
    main { 
     resources { 
      exclude 'mail/mailtext_it.properties' 
     } 
    } 
} 

,并断言,此指示是正确地打印出主资源的文件集解释:

processResources 
{ 
    afterEvaluate 
    { 
     println "resource files (in processResources): " + sourceSets['main'].resources.getFiles() 
    } 
} 

运行时“gradle clean assembly”中,打印出的资源集确实是我期望的(排除的文件不在那里列出),但build/resource /文件夹仍然包含文件,并且它们也存在于目标jar中。

我缺少什么?根据哪个源文件集,哪个任务负责将资源文件复制到构建目录?

+0

只是一个猜测,我想,从源集排除文件只是让在处理资源相他们不要处理。从档案中排除它们。如果你需要从jar文件中排除它们,你需要在'jar'块中配置'exclude'块。 [这里](https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html)是有用的文档。 – Opal

+0

到目前为止,我的理解是:processResources将文件复制(并过滤)到构建目录(因为编译任务将源文件编译到构建目录中),并且jar任务从构建中挑选准备的构件(编译,过滤)目录并将它们打包成一个罐子。这张照片是错的吗? – Heri

+0

它按照你的写法工作。不知道为什么脚本无法正确排除文件 - [demo](https://github.com/Opalo/stackoverflow/tree/master/33347557)'lol'和'lol3'文件应该包含在最终的jar文件中。 – Opal

回答

0

我发现这个问题:在processResources过滤指令是罪魁祸首:

processResources 
{ 
    // Note: narrow the file set to be filtered. Otherwise gradle would change the jks file 
    // when copying to output folder !!! 
    from('src/main/resources') { 
     include '**/*.properties' 
     filter (org.apache.tools.ant.filters.ReplaceTokens, 
      tokens: [ 
         "filtervar.walletservice.productVersion": project.property("filtervar.walletservice.productVersion"), 
        ] 
      )  
    } 
} 

Obviuosly的距离(......)子句覆盖sourceSets定义的定义。我本来预计它会是累积的。

我解决它由(..)definining类似:

from(sourceSets['main'].resources) { 
    include '**/*.properties' 
    ...