【问题标题】:How to get VM options in application when running gradle?运行gradle时如何在应用程序中获取VM选项?
【发布时间】:2021-10-08 09:10:01
【问题描述】:

我运行 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。

【问题讨论】:

    标签: java gradle jvm-arguments


    【解决方案1】:

    这里需要考虑两个 JVM

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

    当您将“-D”参数传递给 Gradle 时,您将在 Gradle 的 JVM 中设置系统属性,该 JVM 与运行您的应用程序的 JVM 不同

    你还没有说你是如何运行你的应用程序的。

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

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

    test {
       systemProperty 'testProfile', 'dockerTest'
    }
    

    如果您想在通过“应用程序”插件运行应用程序时设置系统属性,您会这样做

    apply plugin: 'application'
    
    run {
       systemProperty 'testProfile', 'dockerTest'
    }
    

    【讨论】:

    • 我运行 'gradle test -DtestProfile=dockerTest'。而且我只需要将此属性作为“-D”来获取。
    • 在根帖中添加了一些解释
    • 你还没明白。当您设置“-D”时,您将在 Gradle jvm 中执行此操作。如果要在命令行中指定,则需要将逻辑从 gradle jvm 传递到 test jvm
    猜你喜欢
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多