Maven profiles equivalent of Gradle

后端 未结 3 1668
刺人心
刺人心 2020-12-01 08:25

I\'m trying to achieve a simple scenario in my spring boot project build: including / excluding dependencies and packaging war or jar depending on the environment.

相关标签:
3条回答
  • 2020-12-01 08:31

    My version (inspired by Lance Java's answer):

    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
    }
    
    0 讨论(0)
  • 2020-12-01 08:31

    Sometimes it's also useful to completely switch between different build files by adding some lines of code to the file settings.gradle. This solution reads the environment variable BUILD_PROFILE and inserts it into the 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"
    

    Then you run gradle like this, e.g. to use build-local.gradle:

    $ BUILD_PROFILE="local" gradle compileJava
    > Processing settings.gradle
    > Build profile: local
    > Build file: build-local.gradle
    
    BUILD SUCCESSFUL in 3s
    

    This approach also works for CI/CD pipelines where you might want to add extra tasks like checking quality gates or other time consuming things you don't want to execute locally.

    0 讨论(0)
  • 2020-12-01 08:42
    ext {
        devDependencies = ['org.foo:dep1:1.0', 'org.foo:dep2:1.0']
        prodDependencies = ['org.foo:dep3:1.0', 'org.foo:dep4:1.0']
        isProd = System.properties['env'] == 'prod'
        isDev = System.properties['env'] == 'dev'
    }
    
    apply plugin: 'java'
    
    dependencies {
        compile 'org.foo:common:1.0'
        if (isProd) {
           compile prodDependencies
        }
        if (isDev) {
           compile devDependencies
        }
    }
    
    if (isDev) tasks.withType(War).all { it.enabled = false }
    
    0 讨论(0)
提交回复
热议问题