2015-10-26 11 views
0

Gradle 2.5Gradle: Исключить отдельные файлы ресурсов в сборке

У меня есть несколько файлов пакета ресурсов. Некоторые из них я хочу исключить из упаковки в файл jar адресата, потому что они не содержат еще разрешенных переводов.

Согласно документации и примеров, которые я нашел меня эту директиву:

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

и утверждая, что эта директива будет корректно распечатав набор файлов основных ресурсов:

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

При запуске «Уборка градиентной сборки», печать из набора ресурсов действительно является тем, что я ожидаю (исключенные файлы НЕ перечислены там), но папка build/resource/все еще содержит файлы, и они также присутствуют в контейнере назначения.

Что мне не хватает? Какая задача отвечает за копирование файлов ресурсов в каталог сборки, на основе какого источника?

+0

только предположение, я полагаю, что за исключением файлов из множества источников просто сделать их не перерабатывается на этапе обработки ресурсов. Чтобы исключить их из архива. Если вам нужно исключить их из jar-файла, вам нужно настроить блок 'exclude' внутри блока' jar'. [Здесь] (https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html) являются полезными документами. – Opal

+0

До сих пор я понимаю: processResources копирует (и фильтрует) файлы в каталог сборки (поскольку компиляционная задача компилирует исходные файлы в каталог сборки), а задача jar собирает подготовленные артефакты (скомпилированные, отфильтрованные) из сборки dir и упаковывает их в банку. Неправильно ли это изображение? – Heri

+0

Работает так, как вы писали. Не знаю, почему скрипт не может правильно исключить файлы - [demo] (https://github.com/Opalo/stackoverflow/tree/master/33347557). Файлы 'lol' и' lol3' должны быть включены в финальную банку. – 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' 
    ... 
Смежные вопросы