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

Gradle 2.5

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

Согласно документации и примерам, я обнаружил, что у меня есть эта директива:

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 .

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


person Heri    schedule 26.10.2015    source источник
comment
Предполагаю, что исключение файлов из исходных наборов приведет к тому, что они не будут обрабатываться на этапе обработки ресурсов. Исключить их из архива. Если вам нужно исключить их из файла jar, вам необходимо настроить блок exclude внутри блока jar. Здесь находятся полезные документы.   -  person Opal    schedule 26.10.2015
comment
На данный момент я понимаю: processResources копирует (и фильтрует) файлы в каталог сборки (поскольку задача компиляции компилирует исходные файлы в каталог сборки), а задача jar выбирает подготовленные артефакты (скомпилированные, отфильтрованные) из каталога сборки и упаковывает их в банку. Это неправильное изображение?   -  person Heri    schedule 26.10.2015
comment
Работает как ты написал. Понятия не имею, почему сценарий не может правильно исключить файлы - demo lol и lol3 файлы должны быть включены в последнюю банку.   -  person Opal    schedule 26.10.2015
comment
Я действительно ненавижу такую ​​конфигурацию (с использованием исключений). Вместо того, чтобы сбрасывать все в src/main/resources и использовать excludes, почему бы не поместить их в src/unauthorized/resources и добавить их, когда это необходимо? Гораздо чище ИМХО и меньше магии для запоминания   -  person lance-java    schedule 27.10.2015
comment
@Opal: Большое спасибо за ваши усилия. Ваша демонстрация работает как положено - конечно ;-). К сожалению, настройка моего проекта намного сложнее (многомодульный проект, фильтрация ресурсов, которая сама исключает и т. Д.). Завтра мы собираемся продуктивно, так что у меня больше нет времени возиться с этой проблемой. Я просто удалю соответствующие файлы свойств из магистрали и уйду.   -  person Heri    schedule 27.10.2015


Ответы (1)


Я обнаружил проблему: виновата директива filter в 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"),
                     ]  
            )    
    }
}

Очевидно, что предложение from (...) переопределяет определение определения sourceSets. Я ожидал, что это будет кумулятивно.

Я решил это, определив from (..) как:

from( sourceSets['main'].resources ) {
    include '**/*.properties'
    ...
person Heri    schedule 28.10.2015