- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试将 groovy 嵌入到大型 Java 应用程序中。
Java 应用程序应该在启动时加载一些实用的 Groovy 脚本。
然后应用程序应该多次运行其他脚本。还需要在 GUI 中输入一些代码并在用户请求时执行它。
我面临的问题是:
我正在像这样加载启动脚本:
GroovyShell gShell = new GroovyShell();
gShell.evaluate(new FileReader("scripts/autoload.groovy"));
假设我的 autoload.groovy 包含:
def prnt(m) {
println("From Groovy: " + m);
}
这很好用。但是当我想使用以下命令运行用户命令时:
gShell.evaluate("prnt 66");
我得到错误:groovy.lang.MissingMethodException:没有方法签名:Script2.prnt() 适用于参数类型:(java.lang.Integer) 值:[66]
我的用户脚本如何访问已经加载的方法?
注意:我也试过“autoload.prnt 88”,还是报错。
最佳答案
每个evaluate
调用都被编译并作为单独的Script
运行,并且
def prnt(m) {
println("From Groovy: " + m);
}
在 autoload.groovy
生成的 Script 类中定义了一个方法,它不能从后续的“调用”脚本中访问。但是,由相同的 GroovyShell
运行的脚本共享相同的 binding,因此您可以将值存储在一个脚本的绑定(bind)中,并在另一个脚本中访问它们。在绑定(bind)中存储值只是将值分配给未声明的变量的一种情况:
prnt = { m ->
println("From Groovy: " + m);
}
这在绑定(bind)变量 prnt
中存储了一个闭包,您可以从同一 shell 中的其他脚本调用该闭包。注意
def prnt = { m ->
或
Closure prnt = { m ->
不会 工作,因为 def
或类型使它成为局部变量声明(对该特定脚本私有(private))而不是对绑定(bind)的赋值。
关于java - GroovyShell:嵌入式执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11610717/
我开始用 groovy 编程,我想知道我什么时候使用 GroovyShell (new File ("script.groovy").txt) .evaluate (), 脚本类是否在类路径中看到依赖
我有一个 groovy 脚本需要从外部 groovy 脚本解析一个类。我不确定如何传递参数。这是有效的: 我正在运行的 Groovy 脚本使用这一行从 external.groovy 解析外部类: n
现在,当我尝试在 Groovy 中评估一段代码时,我必须做这样的事情: new GroovyShell(new Binding([var1:var1])).evaluate(line) 当您定义了很多
我正在尝试将 groovy 嵌入到大型 Java 应用程序中。 Java 应用程序应该在启动时加载一些实用的 Groovy 脚本。 然后应用程序应该多次运行其他脚本。还需要在 GUI 中输入一些代码并
例如,如果我执行一个 Groovy 脚本,它修改 String 元类,添加一个方法 foo() GroovyShell shell1 = new GroovyShell(); shell1.evalu
考虑这段代码 def RespJson = RespSlurper.parseText(content) def RespNode= "RespJson"+"."+ assertionKey
我正在尝试在我的 java 应用程序中使用 GroovyShell 来运行代码。该代码将用于测试,并在程序完成时导出到 java 文件。为了方便用户,我希望 groovy 的输入与将要执行的 java
我是 Groovy 的新手,所以我希望答案不是很明显... 假设我有一个脚本“Test.groovy”: class A { def greet() {println "Hey there!"
我使用 GroovyShell 类创建了一个 groovy 引擎。然后我用“evaluate”方法运行一堆语句。 有没有办法捕获引擎的输出,以便我可以获得“println”调用输出? 尽管它是一个 s
特别是http://docs.groovy-lang.org/latest/html/api/groovy/util/GroovyScriptEngine.html和 http://docs.groo
我只想在给定的 GroovyShell 上下文中使用自定义 IntegerMetaClass。 原因是为了不让我的潜在“干扰”IntegerMetaClass 污染整个运行时。 当我将我的 Integ
我对 Groovy 很陌生。如何列出我传递给 Binding 构造函数的所有变量? 考虑到我有以下几点: @Test public void test() { List outputNames
我终于让 Gradle 下载依赖项并将它们传递给我从 gralde 任务调用的 groovy 脚本(因为 gradle 似乎不允许我使用葡萄)。 下面的代码是我能够让它工作的唯一方法。这是正确的方法吗
我正在尝试使用 GroovyShell评估 Grails 应用程序中的一些代码片段,但我似乎无法访问我们的 Grails 域类。例如,当我尝试评估这样的事情时: Eval.me("my.package
我编写项目,在其中使用 Groovy 和 Java。我的项目中有这个 Groovy 脚本: int sum(def a, def b) { return (int)a + (int)b; } 在我的
我需要从我的 Java 应用程序运行一些外部代码,这些代码将经常更新并与应用程序的其余部分正交。由于我不会为每次代码更改(以及其他原因)重新部署整个应用程序,我们选择使用 groovy对于此代码,并将
我正在尝试使用 Groovy 为我的应用程序创建交互式脚本/宏模式。该应用程序是 OSGi,脚本可能需要的大部分信息事先并不知道。我想我可以使用 GroovyShell 并多次调用 eval() 以在
我正在使用 eclipse 和 groovy 插件。我正在构建一个测试工具来调试和测试 groovy 脚本。这些脚本非常简单但很长,其中大多数只是 if/else/return。我发现我可以使用 Gr
我想添加 groovy-shell-server到我们的应用程序。我们最近遇到了几个生产问题,调用内部 API 可以加快诊断速度,甚至可以提供短期修复。 Groovy-shell-server 提供了
对于监控系统,我需要评估由 bool 表达式表示的自定义检查。例如,我有一个简单的伪代码条件(它们可以更复杂): if (webservice is unavailable) and (there a
我是一名优秀的程序员,十分优秀!