问题标签 [groovyshell]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
585 浏览

groovy - 使用 GroovyShell() 从外部 groovy 脚本添加方法

我有一个 groovy 脚本(source.groovy),它需要从另一个 groovy 脚本(external.groovy)调用一个方法。问题是 external.groovy 导入了一个不存在的库,因此出现错误。这是一个例子:

来源.groovy:

这是external.groovy:

当我运行 Source.groovy 时出现错误,因为 com.foo.doesnotexsist 不存在。我不在乎它不存在,因为它不会影响 method() 函数。有没有办法可以调用 method() 函数?

0 投票
1 回答
876 浏览

groovy - 使用 GroovyShell 解析类

我有一个 groovy 脚本,需要在外部 groovy 脚本内的类中运行一个方法。我知道如何在外部 groovy 脚本中运行方法:

但是如果方法在一个类中呢?我试过这个,但它给了我一个错误。

0 投票
1 回答
1677 浏览

java - GroovyScriptEngine 无法加载正在运行的 groovy 脚本的导入

背景 :

我最近开始使用 Groovy,并试图在 eclipse 插件中嵌入一个 groovy 脚本引擎,让我的客户在我的基于 eclipse 的产品中开发自己的 GUI 扩展。这与codehaus 网站上发布的成功故事非常相似。

问题

当尝试加载 groovy 类(“SwtGuiBuilder”)时,GroovyScriptEngine 从 eclipse 插件运行的 groovy 脚本(我们称之为“main_eclipse.groovy”)抛出以下错误:

漏洞!在已经迭代的同时排队新源。排队的源是 'file:/home/nicolas/workspace/groovy-test/src/gui/SwtGuiBuilder.groovy'

问题

有没有人遇到同样的问题?如何解决?任何帮助将不胜感激!

一些观察:

  • 当使用 groovy 解释器而不是 GroovyScriptEngine java 对象时,使用我的 SwtGuiBuilder 类没有问题(请参阅下面的脚本“main_groovy”)。

  • 我的问题似乎不是类路径问题,因为在抛出的异常中提到了包含我的 SwtGuiBuilder 类的文件。

  • 错误消息在两个报告的 groovy 错误 GRECLIPSE-429 和 GRECLIPSE-1037 中提到。我没有完全了解技术细节,但这些错误似乎与加载大量类时的性能问题有关,这与我的情况无关......

细节

SampleView.java

ScriptConnector.java

main_eclipse.groovy

SwtGuiBuilder.groovy

main_groovy.groovy

堆栈跟踪

漏洞!在已经迭代的同时排队新源。排队的源是 org.codehaus.groovy.control.CompilationUnit.addSource(CompilationUnit.java:460) 的 org.codehaus.groovy 的 'file:/home/nicolas/workspace/groovy-test/src/gui/SwtGuiBuilder.groovy' .control.CompilationUnit.addSource(CompilationUnit.java:433) at groovy.util.GroovyScriptEngine$ScriptClassLoader$3.findClassNode(GroovyScriptEngine.java:195) at org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:124)在 org.codehaus.groovy.control.ResolveVisitor.resolveToOuter(ResolveVisitor.java:863) 在 org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:377) 在 org.codehaus.groovy.control.ResolveVisitor.visitClass (ResolveVisitor.java:1407) 在 org.codehaus.groovy.control.ResolveVisitor.startResolving(ResolveVisitor.

我的配置:

  • Linux Ubuntu 14.04 x86

  • Groovy 版本:2.3.2

  • JVM:1.7.0_55

  • Eclipse Kepler SR2 - 内部版本 20140224-0627

  • Eclipse Groovy 插件 v2.0.7

0 投票
1 回答
222 浏览

grails - 在 Grails 应用程序中运行 Groovysh 不接受输入

我试图在 Groovy 上找到一个Pry Deubgger等价物。

我找到了一个足够好的名为groovy-debugger的项目,并更新了它的依赖项以针对 Grails 2.4.0 附带的 groovy 2.3.1 运行。

如果我打开一个 groovysh,只会显示一个闪烁的光标,它不接受任何输入。

我试图获取当前 grails 控制台的输入流和输出流,但它没有帮助。

任何人都可以帮助我在 Groovy 上设置我心爱的REPL 驱动的开发环境。

0 投票
1 回答
4022 浏览

groovy - GroovyShell().parse 传递参数

我有一个 groovy 脚本,需要从外部 groovy 脚本中解析一个类。我不确定如何传递参数。这是有效的:

我正在运行的 Groovy 脚本使用这一行从 external.groovy 解析外部类:

这是 external.groovy 的样子:

有用。

我遇到的问题,我找不到将参数传递给外部方法的方法。这是 external.groovy 的样子:

如何将参数添加到运行脚本:

0 投票
1 回答
670 浏览

groovy - 由 Eval 或 GroovyShell 执行时的惰性 GString 评估

对于监控系统,我需要评估由布尔表达式表示的自定义检查。例如,我有一个简单的伪代码条件(它们可以更复杂):

如果可能的话,我想在这里使用短路评估,这样如果 web 服务可用(并且第一个条件是false),则不会评估第二部分,因为总体结果false无论如何都是。因此,我可以避免在不必要时连接到邮件服务器(和其他耗时的操作)。

这是我要实现的目标的示例:

输出是:

NoDowntimeEmailCheck().check()不应该执行,因为第一个条件已经是false. 我试过了:

  • 使用GroovyShell而不是Eval
  • check()方法更改为字段并应用@Lazy转换
  • 更改${new WebserviceDownCheck().check()}${ -> new WebserviceDownCheck().check()}(在这里看到)

似乎我需要一些惰性机制来允许我GStringEval(或GroovyShell)已经执行它时进行初始化。也许像 lazy Bindingfor之类的东西GroovyShell

我想知道,不编写自定义字符串评估逻辑是否有可能?

0 投票
1 回答
386 浏览

java - 使用 Groovy Shell 评估带有嵌入代码的文件

我是一名 Web 开发人员,最近从使用 PHP 转向使用 Java 开发 Web 应用程序。我最终编写了自己的服务器应用程序,该应用程序可以使用未编译的 groovy 脚本轻松扩展,我的服务器将通过 Groovy Shell 评估这些脚本——即。foo.html.groovy. 直到今天,它仍能创造奇迹,我为我的结果感到非常自豪......但是......我非常想念 PHP 脚本中的一件事,我想在我的应用程序中实现它,那就是嵌入文件中的编程语言代码。我想念它不仅是为了说服,我也想念它,因为使用许多print语句来输出 html 或类似的东西很快就会变得很痛苦,更不用说 Groovy 不能很好地处理 JavaScript 代码,除非几乎所有内容都被转义——即. $ " '.

PHP:

甚至 Ruby on Rails 也为文件提供了类似的东西.erb,而且我想象来自 Groovy 的东西看起来像这样:

我只是好奇是否有人知道这是否已实施或是否可以模仿?当我第一次开发我的应用程序时,我确实尝试使用正则表达式来过滤掉嵌入代码,对其进行评估,然后将其替换回去,但这并不是 100% 完美无缺的,它使调试任何代码错误成为一场噩梦,因为线路和列号从来都不准确。我也尝试过使用 Quercus——它在 Java 中模拟 PHP——但是他们的项目已经过时了,我很难找到文档或帮助。因此,任何解决方案的想法或方向都将不胜感激。

如果有人有兴趣查看我所做的作为参考,这里是我在 GitHub 上的代码存储库——仅供参考,我的应用程序有点过期,需要对代码和结构进行一些大修。

再次感谢任何帮助。

0 投票
1 回答
175 浏览

list - 空列表的 groovy.lang.MissingPropertyException

为什么Groovy 教程中的空列表会引发运行时错误MissingPropertyException

代码很简单:

groovy shell 错误消息如下:

更新

Groovy 版本:1.8.6 JVM:1.6.0_45 供应商:Sun Microsystems Inc. 操作系统:Linux

0 投票
1 回答
1026 浏览

java - 如何在应用程序中正确运行自定义 Groovy 脚本?

解释

我正在用 Java 开发一个游戏,我在地图上有可编写脚本的对象(按钮、开关等)。可编写脚本是指对象具有事件(onActivation、onPress 等),并且需要将脚本文件附加到对象以便在其激活或按下时执行某些操作。

所以事件处理是通过脚本完成的。我的想法是通过 GroovyScriptEngine.createScript 方法在 Java 中创建一个 Groovy Script 对象。然后我在 java 中调用 Script.invokeMethod("onActivation", null) 在 onActivation 发生时运行脚本。这似乎有效。

问题

但是我的 groovy 脚本文件有问题。这是文件:

test.groovy

这是我创建 Script 对象的 java 代码:

稍后在 java 代码中,当处理 onActivation 事件时,我从脚本中调用 onActivation 函数:

但是我的 groovy 脚本失败并显示以下消息:

如果我删除 someVariable 声明和我打印它的行,我的脚本将工作并打印以下消息: Hello Script World!

TL;博士

为什么我的脚本失败?为什么我的函数看不到名为someVariable的变量?

编辑

当我尝试使用 GroovyShell 而不是 GroovyScriptEngine 时,也会发生同样的事情。

编辑2

如果我尝试通过调用script.getProperty("someVariable")来获取Java 代码中someVariable的值,它会抛出一个异常,告诉我该变量不存在。

0 投票
1 回答
1074 浏览

groovy - 常规脚本错误

我是 groovy 的新手。在命令提示符下(我没有使用任何 IDE),我输入了以下内容:(环境变量设置没有问题)

错误 :

data.txt 在该目录中(使用 TAB 键验证)


不知道为什么它会抛出错误????

[data.txt 包含以下格式的原始数据]

1

2

3

4