2015-10-26 63 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' 
    ...