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

时间:2018-02-13 18:00:36

标签: groovy windows-7-x64 system-properties

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

环境:Groovy版本:2.4.12 JVM:1.8.0_141供应商:Oracle Corporation操作系统:Windows 7

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

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

结果:1​​23

b)尝试从另一个JVM-Spawn中读取先前设置的属性,例如getprop.groovy不起作用:

println System.properties["abc"]

结果:null

似乎设置属性并不是真正持久的。我需要做什么,在groovy中保存java环境变量真正持久化?

1 个答案:

答案 0 :(得分:1)

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

这是在Linux中运行groovy test1.groovy脚本的过程。在您的情况下test2.groovy,如果您在System.properties['abc']脚本生成的VM中运行test2.groovy脚本,则可以访问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共享的属性其他

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