Groovylang:设置系统属性不是持久的?

Groovylang: setting system properties are not persistent?

这里我们在设置 java- 系统属性时遇到以下问题。

环境:Groovy 版本:2.4.12 JVM:1.8.0_141 供应商:Oracle 公司 OS:Windows 7

a) 在一个 Groovy 脚本中设置和打印系统 属性,例如setprop.groovy 作品:

System.properties.'abc' = '123'
assert '123' == System.properties['abc']
println System.properties["abc"]

结果:123

b) 尝试从另一个 JVM-Spawn 读取先前设置的 属性,例如getprop.groovy 无效:

println System.properties["abc"]

结果:空

似乎设置 属性 并不是真正持久的。我必须做什么才能真正持久地保存 java 环境变量,在 groovy?

System.properties 指的是可用于 运行 脚本的 JVM 进程的属性。当您 运行 一个 Groovy 脚本时,它会生成一个 VM 并 运行 在这个 VM 中运行脚本,例如

/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.fc26.x86_64/bin/java -classpath /home/wololock/.sdkman/candidates/groovy/current/lib/groovy-2.4.12.jar -Dscript.name=/home/wololock/.sdkman/candidates/groovy/current/bin/groovy -Dprogram.name=groovy -Dgroovy.starter.conf=/home/wololock/.sdkman/candidates/groovy/current/conf/groovy-starter.conf -Dgroovy.home=/home/wololock/.sdkman/candidates/groovy/current -Dtools.jar=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-0.b14.fc26.x86_64/lib/tools.jar org.codehaus.groovy.tools.GroovyStarter --main groovy.ui.GroovyMain --conf /home/wololock/.sdkman/candidates/groovy/current/conf/groovy-starter.conf --classpath . test1.groovy

这就是 运行ning groovy test1.groovy 脚本在 Linux 中的样子。在你的情况下 test2.groovy 将能够访问 System.properties['abc'] 如果你 运行 test2.groovy VM 中的脚本由 test1.groovy 脚本生成,例如

System.properties.'abc' = '123'
assert '123' == System.properties['abc']
println System.properties["abc"]

GroovyShell shell = new GroovyShell()
shell.parse(new File('test2.groovy')).run()

在这个例子中,我有 运行 test2.groovy 使用 GroovyShell,我在控制台中得到的是:

123
123

第一个 123test1.groovy 脚本打印,第二个 test2.groovy 脚本打印。

您甚至可以尝试同时添加 Thread.sleep(10000)(休眠 10 秒)和 运行 这两个脚本并列出 运行 groovy 的进程 - 您会看到两个生成的 VM 彼此之间不共享属性。

如果您想从一个脚本获取值到另一个脚本,我建议您从第一个脚本返回该值并将其作为参数传递给第二个脚本。