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
第一个 123
由 test1.groovy
脚本打印,第二个 test2.groovy
脚本打印。
您甚至可以尝试同时添加 Thread.sleep(10000)
(休眠 10 秒)和 运行 这两个脚本并列出 运行 groovy
的进程 - 您会看到两个生成的 VM 彼此之间不共享属性。
如果您想从一个脚本获取值到另一个脚本,我建议您从第一个脚本返回该值并将其作为参数传递给第二个脚本。
这里我们在设置 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
第一个 123
由 test1.groovy
脚本打印,第二个 test2.groovy
脚本打印。
您甚至可以尝试同时添加 Thread.sleep(10000)
(休眠 10 秒)和 运行 这两个脚本并列出 运行 groovy
的进程 - 您会看到两个生成的 VM 彼此之间不共享属性。
如果您想从一个脚本获取值到另一个脚本,我建议您从第一个脚本返回该值并将其作为参数传递给第二个脚本。