Java 如何在Gradle 4.7中设置spring boot活动配置文件

Java 如何在Gradle 4.7中设置spring boot活动配置文件,java,spring-boot,gradle,profile,Java,Spring Boot,Gradle,Profile,总体: 我试图为特定的spring概要文件运行gradle构建任务,但在通过以下测试时出错: au.com.mnpd.security.JwtTokenUtilTest > generateToken_succeeds FAILED java.lang.IllegalStateException Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException Caused by:

总体:
我试图为特定的spring概要文件运行gradle构建任务,但在通过以下测试时出错:

au.com.mnpd.security.JwtTokenUtilTest > generateToken_succeeds FAILED
java.lang.IllegalStateException
    Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException
        Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException
            Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException
                Caused by: org.springframework.beans.factory.BeanCreationException
                    Caused by: java.lang.IllegalArgumentException
测试使用springdevelopment概要文件(位于application development.yaml)中的一些属性。但我找不到任何方法将活动配置文件传递给gradle build命令。 我尝试了以下内容,但还是同样的问题:

- gradlew -Dspring.profiles.active=development build

- gradlew -Pdevelopment build
问题:
是否仍有将活动配置文件传递给gradle(V4.7)构建任务的方法,如适用于引导运行任务的方法,如下所示:

bootRun {
        bootRun.systemProperty 'spring.profiles.active', 'development'
}
注意:我对生成任务尝试了相同的方法,但生成任务不存在build.systemProperty方法


由于我是格拉德尔的新人,如果您能与我分享您真正的解决方案,我将不胜感激

您要查找的是在
测试任务上设置系统属性,该任务将运行单元测试:

test {
  systemProperty 'spring.profiles.active', 'development'
}
评论后编辑-保留下面的原始答案,因为它可能仍然有用。

Gradle不知道
bootRun
公开其系统属性的方式

因此,您必须在构建脚本中添加一个配置,以便向Gradle命令行公开所需的内容

比如:

bootRun {
    bootRun.systemProperty 'spring.profiles.active', "${springProfile}"
}
然后在
gradle.properties
中设置默认值:

springProfile = development
并可能覆盖命令行上的值:

./gradlew -PspringProfile=test build

如果使用gradle引导运行,则需要将其添加到build.gradle文件中

bootRun {
    String activeProfile =  System.properties['spring.profiles.active']
    systemProperty "spring.profiles.active", activeProfile
}
然后在构建时,您可以使用gradle bootRun-dsspring.profiles.active=test

或者你可以使用
gradle build-dsspring.profiles.active=test

gradle文件不应该依赖于您的spring概要文件,除非您明确希望这样做

要使用特定配置文件运行应用程序,请使用:

SPRING_PROFILES_ACTIVE=myprofile ./gradlew bootRun
在build.gradle中:

task 'testCi' (type: Test) {
    useJUnit()
    jvmArgs "-Dspring.profiles.active=ci"
}

task 'testLocal' (type: Test) {
    useJUnit()
    jvmArgs "-Dspring.profiles.active=local"
}
我刚被Gradle用Gradle 6.x处理这件事的方式给咬了一口, 我有两个单独的测试任务,其中我希望使用本地或CI配置运行相同的测试

测试使用Junit平台,Gradle为其生成了一个新的JVM。据我所知,systemProperties不会传递给运行测试的JVM,但jvmArgs会专门将属性传递给测试JVM


按照Eugene的建议使用env vars也可以工作,因为子JVM通常从其父JVM继承env。

感谢您的回复。但是,我希望对build而不是bootRun执行相同的操作。在bootRun中一切正常,但我不知道如何对“构建”任务执行同样的操作。如何说配置文件是默认配置文件,例如
application.properties
?为什么不在运行时尝试添加参数“spring.profiles.active=dev”。确保有相应的属性文件可用