Maven профилирует эквивалент Gradle

Я пытаюсь реализовать простой сценарий в сборке проекта весенней загрузки: включение/исключение зависимостей и упаковка war или jar в зависимости от среды.

Так, например, для среды dev включите инструменты разработки и пакет jar, для prod война пакетов и т. д.

Я знаю, что это больше не конфигурация на основе XML, и я могу в основном писать операторы if в моем build.gradle, но есть ли рекомендуемый способ добиться этого?

Могу ли я объявить некоторые общие зависимости и указать их в одном файле вместо создания нескольких файлов сборки?

Существует ли наилучшая практика изменения конфигурации сборки в зависимости от целевой среды сборки?


person Mehmet Catalbas    schedule 17.11.2016    source источник


Ответы (2)


Моя версия (вдохновленная ответом Ланса Java):

apply plugin: 'war'

ext {
  devDependencies = {
    compile 'org.foo:dep1:1.0', {
      exclude module: 'submodule'
    }
    runtime 'org.foo:dep2:1.0'
  }

  prodDependencies = {
    compile 'org.foo:dep1:1.1'
  }

  commonDependencies = {
    compileOnly 'javax.servlet:javax.servlet-api:3.0.1'
  }

  env = findProperty('env') ?: 'dev'
}

dependencies project."${env}Dependencies"
dependencies project.commonDependencies

if (env == 'dev') {
  war.enabled = false
}
person Vyacheslav Shvets    schedule 10.01.2017

Иногда также полезно полностью переключаться между разными файлами сборки, добавляя несколько строк кода в файл settings.gradle. Это решение считывает переменную среды BUILD_PROFILE и вставляет ее в buildFileName:

# File: settings.gradle
println "> Processing settings.gradle"
def buildProfile = System.getenv("BUILD_PROFILE")
if(buildProfile != null) {
    println "> Build profile: $buildProfile"
    rootProject.buildFileName = "build-${buildProfile}.gradle"
}
println "> Build file: $rootProject.buildFileName"

Затем вы запускаете gradle следующим образом, например. использовать build-local.gradle:

$ BUILD_PROFILE="local" gradle compileJava
> Processing settings.gradle
> Build profile: local
> Build file: build-local.gradle

BUILD SUCCESSFUL in 3s

Этот подход также работает для конвейеров CI/CD, где вы можете добавить дополнительные задачи, такие как проверка ворот качества или другие трудоемкие вещи, которые вы не хотите выполнять локально.

person IPP Nerd    schedule 17.12.2019