Возможно ли фильтрация ресурсов в 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'),
)
}
}
Ответ 3
Подход spring -boot
project.version=X.X.X.X
[email protected]@
http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#production-ready-application-info-automatic-expansion