Can';使用Grails3.2.9在命令行上传递系统属性

Can';使用Grails3.2.9在命令行上传递系统属性,grails,groovy,grails-3.0,Grails,Groovy,Grails 3.0,我试图使用-Dproperty=value语法将系统属性传递给Grails,但它似乎不起作用。以下是我的设置: build.gradle: bootRun { addResources = true systemProperties = System.properties } server: port: '${server_port}' grails -Dserver_port=8180 run-app application.yml: bootRun {

我试图使用
-Dproperty=value
语法将系统属性传递给Grails,但它似乎不起作用。以下是我的设置:

build.gradle:

bootRun {

     addResources = true
     systemProperties = System.properties 
 }
server:
  port: '${server_port}'
grails -Dserver_port=8180 run-app
application.yml:

bootRun {

     addResources = true
     systemProperties = System.properties 
 }
server:
  port: '${server_port}'
grails -Dserver_port=8180 run-app
命令行:

bootRun {

     addResources = true
     systemProperties = System.properties 
 }
server:
  port: '${server_port}'
grails -Dserver_port=8180 run-app
当我尝试运行应用程序时,我得到以下信息:

java.lang.NumberFormatException: 
For input string: "${server_port}"
文档表明这种方法应该可以工作,但显然${server\u port}表达式没有被用-D选项传递的值替换

有人能解释是什么导致了这种行为吗


还有,在别人问之前。。是的,我知道--port命令行开关。这一点并不是专门传递服务器端口,尽管我更希望与其他脚本保持一致。但除此之外,我还计划在运行时使用-Doption=value来传递其他设置,因此我确实需要它来工作。

问题出现在application.yml文件中。此位:

server:
   port: ${server.port}
实际上需要嵌套在grails元素下,如下所示:

grails:
  server:
    port: ${server.port}
这样做的时候效果很好。请注意,实际上根本不需要这样做,因为只要设置
-Dserver.port=which
就可以自己工作,如果您有用于传递系统属性的bootRun设置。或者您可以使用
--port
。我对这方面的兴趣实际上是确保系统属性在总体上得到传递,因为我需要为我的应用程序设置一些其他属性。我只是用这个做实验