Это расширение этого Gradle-ориентированного ответа с некоторыми более конкретными примерами.
Во-первых, нам нужно прочитать все ресурсы, которые нас интересуют, во что-то, что filter
метод задачи копирования будет распознавать. Условно это был просто стандартный Properties
объект.
Это можно сделать так:
def resources = new Properties()
file($projectDir/src/main/resources/<insert-properties-file>.properties").withInputStream {
resources.load(it)
}
Обратите внимание, что может быть более элегантный способ получить более одного свойства подать сразу; у меня этот подход просто сработал для одного файла.
Затем нам нужно выполнить фильтрацию. Это может быть достигнуто с закрытием from
. Для этого мы используем ReplaceTokens class (который мы можем импортировать) и настраиваем начальный и конечный токены, чтобы они соответствовали нашему использованию переменной.
from("$projectDir/path/to/folder/that/has/tokens/to/replace") {
include "**/files-to-filter-on"
filter(ReplaceTokens, tokens: resources, beginToken: "${", endToken: "}")
}
Чтобы вставить это в WAR, нам нужно загрузить это в задачу processResources
.
Все вместе:
processResources {
with copySpec {
def resources = new Properties()
file($projectDir/src/main/resources/<insert-properties-file>.properties").withInputStream {
resources.load(it)
}
from("$projectDir/path/to/folder/that/has/tokens/to/replace") {
include "**/files-to-filter-on"
filter(ReplaceTokens, tokens: resources, beginToken: "${", endToken: "}")
}
}
При выполнении ./gradlew clean war
ресурсы, которые вы хотите отфильтровать, будут правильно отфильтрованы в архиве.