在运行已完成的任务之前先构建Gradle getProperties

时间:2018-09-19 17:16:40

标签: gradle serenity-bdd system-properties

我正在尝试使用gradle版本4.8+的Java Serenity-BDD项目,但是该应用程序未提取-Denvironment和-Dservicebranches的CLI参数。我在local.properties文件中将这些属性作为空白值使用,并且在我的应用运行时未分配这些属性。

  
      
  • ./ gradlew --build-cache build -Dwebdriver.remote.url = $ {SELENIUM_REMOTE_URL} -Denvironment = $ {ENVIRONMENT} -Dservicebranches = $ {SERVICE_BRANCHES} -Dtags = $ {TAGS}
  •   

我有一个local.properties文件,其属性已成功依赖项注入到项目中(通过Serenity-Spring)。我希望这些CLI参数将覆盖这些值:

servicebranches=
environment=local

但是现在,CLI参数中指定的任何内容都不会传递到项目中。通过DI或通过在build.gradle中显式获取环境变量(我尝试过的方法都没有用)。

以下是我在build.gradle中尝试过的一些事情:

//task integrationTests() {
//    doFirst
//        {
//            def environment = System.getProperty('environment')
//            def servicebranches = System.getProperty('servicebranches')
//        }
//    tasks.build.execute()
//}
//integrationTests.dependsOn(build)

//build.doFirst{
//    systemProperties System.properties
//    def environment = System.properties['environment']
//    environment = environment //This actually flags with 'Silly assignment'
//}

build.doFirst{
    def environment = System.getProperty('environment')
    def servicebranches = System.getProperty('servicebranches')
}

最新的程序似乎仍然缺少一个步骤,因为该程序仍在运行,但args仍未通过。我什至尝试了-Denvironment = potato,并且没有出现错误,因为我没有名为该属性或属性的文件。

我也尝试过使用-P标记而不是-D标记,但这似乎也不起作用。

我要做的就是在使用Serenity附带的已创建“ build”任务之前,使用build.gradle来使用System.getProperty('environment')和System.getProperty('servicebranches')。我该怎么做?我是否在使用这些getProperties的情况下构建了一个全新的任务,然后调用了构建任务?我必须在local.properties文件中指定这些相同的命名变量的分配吗?

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

我知道这是一个非常老的问题,但这是我为解决问题而做的事情,我从这里得到了这个主意:https://github.com/serenity-bdd/serenity-documentation/pull/120/files

Serenity并未将环境从gradle中拉出来以使用EnvironmentSpecificProperties,当我删除默认环境时,它一直说“环境'null的未定义属性”。我必须将其添加到我的Gradle文件中:

test {
    systemProperty 'environment', System.properties['environment']
}