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

Примере

# config.properties
hostname = @myhost@

И в build.gradle сделайте что-то вроде ниже

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

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

hostname = localhost

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

19
Krishnaraj 15 Авг 2014 в 18:20

3 ответа

Лучший ответ

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

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')
        ]
    }
}
27
JB Nizet 15 Авг 2014 в 14:35

Подход с пружинной загрузкой

project.version=X.X.X.X
info.build.version=@project.version@

http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#production-ready-application-info-automatic-expansion

1
Chomeh 16 Май 2015 в 02:15

Если хотите, можете использовать такие вещи, как заполнитель.

В файле config.properties

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

В файле gradle.properties

processResources {
    filesMatching('**config.properties') {
        expand(
            'var1': project.property('var1'),
            'var2': project.property('var2'),
        )
    }
}
6
Quy Tang 13 Июн 2016 в 11:00