如何在 运行 gradle 时在应用程序中获取 VM 选项?

How to get VM options in application when running gradle?

我运行gradle任务:

gradle test -DtestProfile=dockerTest

当我尝试从应用程序获取此变量时:

System.getProperty("testProfile")

我得到空值。

如何在应用程序中正确获取虚拟机选项?

一些解释。

我有一些配置文件用于 运行 在不同环境中进行测试。每个配置文件的不同属性,如下所示:

application-local.yml
application-test.yml
application-dockerTest.yml
...

每个环境都应该根据其配置文件开始自己的测试。比,我写了解析器:

class TestActiveProfilesResolver : ActiveProfilesResolver {

    override fun resolve(testClass: Class<*>): Array<String> =
        System.getProperty("testProfile")
}

在这里使用它:

@ActiveProfiles(resolver = TestActiveProfilesResolver::class)

我想在 gradle 测试开始时发送 'testProfile' 变量,例如 VM 变量 -DtestProfile=dockerTest

但是System.getProperty("testProfile") == null。

这里有两个 JVM 需要考虑

  1. Gradle 的 JVM
  2. 应用程序的 JVM

当您将“-D”参数传递给 Gradle 时,您正在 Gradle 的 JVM 中设置一个系统 属性,它与 运行 不同的 JVM ]是你的申请

你还没有说你是如何运行申请的。

  • 您是否运行在测试用例中安装应用程序?
  • 您是否运行通过 application plugin 中的“运行”任务完成它?

如果你想在测试期间设置 属性 你会做类似

test {
   systemProperty 'testProfile', 'dockerTest'
}

如果您想在 运行通过“应用程序”插件安装您的应用程序时设置系统 属性,您可以

apply plugin: 'application'

run {
   systemProperty 'testProfile', 'dockerTest'
}