Несколько задач сборки с изменением наборов зависимостей в Gradle

#gradle #build.gradle

#gradle #build.gradle

Вопрос:

Я хотел бы запустить тесты библиотеки для разных реализаций серверной части.
Реализации внедряются в мой проект с помощью магии Spring.

В настоящее время я делаю это, изменяя строку

 testImplementation group: 'org.mycorp.exmpl' name: 'redis-backend' version: '0.0.1'
  

Для

 testImplementation group: 'org.mycorp.exmpl' name: 'mongo-backend' version: '0.0.1'
  

Для

 testImplementation group: 'org.mycorp.exmpl' name: '<whatever-backend>' version: '<whatever.version>'
  

затем выполняется

 gradlew test
  

(соответственно. щелчок по «тестированию» в моей IntelliJ IDE)


Это громоздко. И я не могу этого сделать с моим конвейером сборки (я думаю).

В моем воображении я мог бы создать

  • задача testRedis , которая зависит от задачи buildRedisTestClasses
  • задача testMongo , которая зависит от задачи buildMongoTestClasses

таким образом, я могу просто выбрать правильную задачу в моей IDE или запустить их все в моем конвейере сборки.
Я нашел несколько подсказок в Интернете, что вы можете использовать что-то вроде этого:

 dependencies {
    testImplementation group: 'org.mycorp.exmpl', name: 'redis-backend', version: '0.0.1', configuration: 'redis'
    testImplementation group: 'org.mycorp.exmpl', name: 'mongo-backend', version: '0.0.1', configuration: 'mongo'
}
  

Но примерно там я перестал находить / понимать.
(Как вы могли заметить, я новичок в gradle)

Ответ №1:

Попробуйте что-то похожее:

 ./gradlew test -Dbackend=redis

dependencies {
    if (System.getProperty("backend") == "redis") {
        implementation "org.mycorp.exmpl:redis-backend:0.0.1"
    } else {
        implementation "org.mycorp.exmpl:mongo-backend:0.0.1"
    }
}
  

Или даже:

 ./gradlew test -Dbackend=redis-backend:0.0.1

implementation "org.mycorp.exmpl:${System.getProperty("backend")}"
  

Превращение его в свойство проекта -Pbackend с предлагаемым значением по умолчанию.

Смотрите Параметры среды.