И снова gradle: делаем профили

Written by elwood

gradle_logo

Научился сегодня по-простому делать профили а-ля мавно. Рецепт таков:

1) Создаём файл defaults.gradle. В нём будут лежать значения свойств по умолчанию, например:

allprojects {
    ext {
        // Solr connection
        host = 'localhost'
        port = '8983'
        username = ''
        password = ''
    }
}
 
project(':crawler') {
    // SQL Server connection
    project.ext["jdbc.url"]='jdbc:jtds:sqlserver://...'
    project.ext["jdbc.username"] = 'user'
    project.ext["jdbc.password"] = 'passasdf'
    project.ext["jdbc.driverClassName"]='net.sourceforge.jtds.jdbcx.JtdsDataSource'
}

2) Для каждого профиля создаём файл с именем profile-${profile}.gradle, например, файл profile-stage.gradle:

allprojects {
    ext {
        host = '234.23.42.3'
        port = '6001'
        username = ''
        password = ''
    }
}

3) В основной скрипт сборки build.gradle в начало добавляем следующий код:

apply from: "defaults.gradle"
if (hasProperty('profile')) {
    apply from: "profile-${profile}.gradle"
}

Таким образом, defaults.gradle будет применяться всегда, а скрипт, специфичный для конкретного профиля – только если указывается свойство profile.

4) Запустить сборку с указанием профиля:

gradlew -Pprofile=stage :crawler:build

Если вы только что собрали что-то с одним профилем, а потом решили пересобрать для другого, убедитесь, что gradle прознал о том, что что-то надо пересобрать. Например, если вы используете Ant Filtering, то градло не поймёт, что ресурсы надо пересобрать – нужно явно выполнить clean.