我试图在另一个groovy脚本中定义变量,我想在当前脚本中使用它。我有两个这样的脚本:
script1.groovy
thing = evaluate(new File("script2.groovy"))
thing.setLocalEnv()
println(state)
script2.groovy
static def setLocalEnv(){
def state = "hi"
def item = "hey"
}
当我打印ln(state)时,我得到一个缺少的属性异常。基本上,我希望script2具有可以在script1上下文中加载的配置变量。我该怎么做?
我不确定您到底想做什么/如何做,但我想您可以使用groovy Dynamicque脚本功能中可用的类之一来实现您的目标:groovy。lang.Binding或GroovyClassLoader或GroovyScript引擎,下面是使用GroovyShell类的示例:
abstract class MyScript extends Script {
String name
String greet() {
"Hello, $name!"
}
}
import org.codehaus.groovy.control.CompilerConfiguration
def config = new CompilerConfiguration()
config.scriptBaseClass = 'MyScript'
def shell = new GroovyShell(this.class.classLoader, new Binding(), config)
def script = shell.parse('greet()')
assert script instanceof MyScript
script.setName('covfefe')
assert script.run() == 'Hello, covfefe!'
这是将变量绑定到外部脚本文件的一种方法,更多示例来自doc:http://docs.groovy-lang.org/latest/html/documentation/guide-integrating.html
P. S.加载外部文件可以使用
GroovyClassLoader
完成:
def gcl = new GroovyClassLoader()
def clazz2 = gcl.parseClass(new File(file.absolutePath))
希望这有帮助。
我有两个脚本和。脚本调用时返回一个随机数。我想从并打印所有这些返回值。换句话说,脚本如下所示: 现在我有以下代码在 但是,我收到的错误是,。我将如何着手完成这项任务?
我使用groovy脚本中的方法创建了一个自定义dsl命令链。我从另一个groovy文件访问此命令链时遇到问题。是否有实现功能的方法? 我尝试过使用“evaluate”,它可以加载groovy文件,但无法执行命令链。我尝试过使用GroovyShell类,但无法调用这些方法。 我这里有一个小房间。groovy中执行“please show the cube\u root of 1000”会产生10的结
我正在做一个新的项目,我试图建立一个货币系统,在那里我可以提取它,以转移到另一个变量(在另一个类)。我在解决这个问题上遇到了一些问题,我对如何编写代码感到非常失望。下面是我想链接的类(我想让“coinsamount”在我做/存款时进入类2“amount” 第2类:
我有一些库脚本:lib1。groovy: lib2.groovy: lib3.groovy: 并希望在另一个脚本中使用它们:conf.groovy: conf.groovy是由用户配置的,他不知道我的后台lib脚本!他只知道提供的方法/任务:a()、b()、c()。实际上,我创建lib脚本是为了简化用户。 有没有办法将lib目录中的所有脚本(脚本lib1、lib2m、lib3)都包含到conf.g
问题内容: 我有一个名为test1.py的脚本,该脚本不在模块中。它只包含应在脚本本身运行时执行的代码。没有函数,类,方法等。我有另一个作为服务运行的脚本。我想从作为服务运行的脚本中调用test1.py。 例如: 文件service.py 我知道一种方法是打开文件,读取内容并进行基本评估。我假设有一种更好的方法。或者至少我希望如此。 问题答案: 这样做的通常方法如下。 test1.py servi
问题内容: 我想将“ $ WORSKPACE”变量用于jenkins脚本调用的常规文件。但是在SO上找到的所有解决方案都失败了: 我得到的消息:脚本不允许使用groovy.lang.GroovyObject方法setProperty java.lang.String java.lang.Object(JenkinsHelper.name)。管理员可以决定是批准还是拒绝此签名。 对设置为允许Jenk