Возможно ли фильтрация ресурсов в Gradle без использования токенов?

Рекомендуемым способом фильтрации ресурсов в Gradle является наличие токенов в файле свойств, а затем их замена при обработке.

Пример

# config.properties
hostname = @[email protected]

и в build.gradle выполните что-то вроде ниже

processResources {
   filter ReplaceTokens, tokens: [
      "myhost": project.property('myhost')
   ]
}

Проблема с этим подходом заключается в том, что он не будет работать при работе с IDE, например eclipse. Я хотел бы, чтобы файлы свойств были свободны от Gradle конкретных токенов. Я просто имею

hostname = localhost

но есть возможность заменить его при создании из Gradle.

Ответ 1

Вы можете использовать следующие (не проверенные):

processResources {
    filesMatching('**/config.properties') {
        filter {
            it.replace('localhost', project.property('myhost'))
        }
    }
}

Или вы можете иметь файл по умолчанию, используемый во время разработки в вашей среде IDE, и иметь другой файл, содержащий токены и заменяющий его при создании с использованием gradle. Что-то вроде этого (не проверено)

processResources {
    exclude '**/config.properties'
    filesMatching('**/config-prod.properties') {
        setName 'config.properties'
        filter ReplaceTokens, tokens: [
            "myhost": project.property('myhost')
        ]
    }
}

Ответ 2

Можно использовать объект, например, если вы хотите.

В файле config.properties

var1=${var1}
var2=${var2}

В gradle.properties файле

processResources {
    filesMatching('**config.properties') {
        expand(
            'var1': project.property('var1'),
            'var2': project.property('var2'),
        )
    }
}