如何通过gradle任务

时间:2016-04-28 18:57:40

标签: java spring gradle

我正在尝试设置gradle以启用bootRun进程并启用各种弹簧配置文件。

我当前的bootRun配置如下:

bootRun {
    // pass command line options from gradle to bootRun
    // usage: gradlew bootRun "-Dspring.profiles.active=local,protractor"
    if (System.properties.containsKey('spring.profiles.active')) {
        systemProperty "spring.profiles.active", System.properties['spring.profiles.active']
    }
}

我想使用gradle任务设置系统属性,然后执行bootRun

我的尝试看起来像这样:

task bootRunDev

bootRunDev  {
    System.setProperty("spring.profiles.active", "Dev")
}

几个问题:

  1. systemProperty spring boot bootRun配置的一部分吗?
  2. 是否可以在另一个任务中设置系统属性?
  3. 我的下一步应该是什么?我需要在bootRunDev
  4. 之前进行bootRun配置
  5. 我应该研究另一种方法
  6. -Eric

12 个答案:

答案 0 :(得分:25)

最简单的方法是定义默认值并允许它被覆盖。我不确定在这种情况下systemProperty的用途是什么。简单的论证就可以完成这项工作。

def profiles = 'prod'

bootRun {
  args = ["--spring.profiles.active=" + profiles]
}

运行dev:

./gradlew bootRun -Pdev

要为您的任务添加依赖项,您可以执行以下操作:

task setDevProperties(dependsOn: bootRun) << {
  doFirst {
    System.setProperty('spring.profiles.active', profiles)
  }
}

在Gradle中有很多方法可以实现这一目标。

编辑:

为每个环境配置单独的配置文件。

if (project.hasProperty('prod')) {
  apply from: 'gradle/profile_prod.gradle'
} else {
  apply from: 'gradle/profile_dev.gradle'
}

每个配置都可以覆盖任务,例如:

def profiles = 'prod'
bootRun {
  systemProperty "spring.profiles.active", activeProfile
}

在这种情况下通过提供prod标志来运行:

./gradlew <task> -Pprod

答案 1 :(得分:25)

环境变量可用于设置弹簧属性,如the documentation中所述。因此,要设置活动配置文件(spring.profiles.active),您可以在Unix系统上使用以下代码:

SPRING_PROFILES_ACTIVE=test gradle clean bootRun

在Windows上,您可以使用:

SET SPRING_PROFILES_ACTIVE=test
gradle clean bootRun

答案 2 :(得分:11)

Spring Boot v2 Gradle plugin docs提供了一个答案:

  

6.1。将参数传递到您的应用程序

     

与所有JavaExec任务一样,在使用 4.9版或更高版本时,可以使用--args='<arguments>'从命令行将参数传递到bootRun中。

要运行将活动配置文件设置为 dev 的服务器:

$ ./gradlew bootRun --args='--spring.profiles.active=dev'

答案 3 :(得分:7)

对于使用Spring Boot 2.0+的人,您可以使用以下内容设置一个任务,该任务将使用给定的一组配置文件运行应用程序。

task bootRunDev(type: org.springframework.boot.gradle.tasks.run.BootRun, dependsOn: 'build') {
    group = 'Application'

    doFirst() {
        main = bootJar.mainClassName
        classpath = sourceSets.main.runtimeClasspath
        systemProperty 'spring.profiles.active', 'dev'
    }
}

然后,您只需从IDE运行./gradlew bootRunDev或类似内容即可。

答案 4 :(得分:3)

使用此shell命令将起作用:

SPRING_PROFILES_ACTIVE=test gradle clean bootRun

可悲的是,这是我发现的最简单的方法。 它为该调用设置环境属性,然后运行该应用程序。

答案 5 :(得分:3)

Kotlin 版本:在您的build.gradle.kts文件中定义以下任务:

tasks.named<BootRun>("bootRun") {
  args("--spring.profiles.active=dev")
}

这会将参数--spring.profiles.active=dev传递到bootRun,在这种情况下,配置文件名称为dev

每次运行gradle bootRun时,都会使用配置文件dev

答案 6 :(得分:2)

针对具有不同配置文件和gradle任务依赖性的4个不同任务的配置:

  • A = internal clients union external clients B = internal addresses union external addresses C = A join B join phone numbers bootRunLocal-使用特定的配置文件运行
  • bootRunDevbootPostgresRunLocal与上一版本相同,但是在bootRun之前/之后执行自定义任务bootPostgresRunDevrunPostgresDocker

killPostgresDocker

build.gradle

答案 7 :(得分:2)

在您的build.gradle文件中,只需使用以下代码段

bootRun {
  args = ["--spring.profiles.active=${project.properties['profile'] ?: 'prod'}"]
}

然后运行以下命令以使用dev配置文件:

./gradlew bootRun -Pprofile=dev

答案 8 :(得分:1)

添加到VM选项: -Dspring.profiles.active = dev

答案 9 :(得分:0)

我希望它很简单,就是能够像您一样调用gradle bootRunDev,而不必进行任何额外的输入。

这对我有用-通过在任务中首先配置bootRun,然后在它运行bootRun之后立即运行,对我来说很好:)

onchange

答案 10 :(得分:0)

对于希望在Kotlin DSL中实现此功能的任何人,这是build.gradle.kts的有效示例:

tasks.register("bootRunDev") {
    group = "application"
    description = "Runs this project as a Spring Boot application with the dev profile"
    doFirst {
        tasks.bootRun.configure {
            systemProperty("spring.profiles.active", "dev")
        }
    }
    finalizedBy("bootRun")
}

答案 11 :(得分:0)

我的方式:

在gradle.properties中:

profile=profile-dev

在build.gradle中添加VM选项-Dspring.profiles.active:

bootRun {
   jvmArgs = ["-Dspring.output.ansi.enabled=ALWAYS","-Dspring.profiles.active="+profile]
}

这将覆盖应用程序 spring.profiles.active 选项