我已经习惯了Grails转换器,你可以将任何对象转换为JSON表示,就像这样(http://grails.org/Converters+Reference)
return foo as JSON
Run Code Online (Sandbox Code Playgroud)
但在简单的groovy中,我找不到一个简单的方法(http://groovy-lang.org/json.html)
JSONObject.fromObject(this)
Run Code Online (Sandbox Code Playgroud)
返回空的json字符串...
我错过了一个明显的Groovy转换器吗?或者我应该去杰克逊或gson图书馆?
我对Groovy 文档中使用的术语"闭包"感到困惑.根据文档,他们对闭包的定义看起来更像是匿名函数或lambda.
我理解支持第一类函数的语言通常允许形成闭包.但是,这两个概念之间存在差异.
例如,根据Groovy文档:
Groovy中的闭包是一个匿名的代码块,可以接受参数,返回值,引用和使用在其周围范围内声明的变量.
在函数式语言中,这样的匿名代码块通常可以称为匿名lambda表达式,或者带有未绑定变量的lambda表达式,或者如果它不包含对未绑定变量的引用(如前面示例中的阈值),则称为闭合lambda表达式.Groovy没有这样的区别.
然后根据关闭的Wikipedia页面:
术语闭包通常被错误地用于表示匿名函数.
我错过了什么?
我正在使用随附的Eclipse-Groovy插件的最新版本(2.8.0)groovy-all-2.1.5.jar.我将Guice添加到我的Groovy项目中,当我从Eclipse内部运行它们时,我在控制台输出中收到以下错误:
Caught: java.lang.NoClassDefFoundError: org/codehaus/groovy/runtime/typehandling/ShortTypeHandling
java.lang.NoClassDefFoundError: org/codehaus/groovy/runtime/typehandling/ShortTypeHandling
at net.me.myapp.utils.restclient.RestClient.<init>(RestClient.groovy:57)
at net.me.myapp.inject.UserServiceClientModule.configure(UserServiceClientModule.groovy:34)
at com.google.inject.AbstractModule.configure(AbstractModule.java:59)
at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:223)
at com.google.inject.spi.Elements.getElements(Elements.java:101)
at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:133)
at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:103)
at com.google.inject.Guice.createInjector(Guice.java:95)
at com.google.inject.Guice.createInjector(Guice.java:72)
at com.google.inject.Guice.createInjector(Guice.java:62)
at net.me.myapp.UserServiceClient.<init>(UserServiceClient.groovy:37)
at net.me.myapp.UserServiceClient.main(UserServiceClient.groovy:45)
Caused by: java.lang.ClassNotFoundException: org.codehaus.groovy.runtime.typehandling.ShortTypeHandling
... 12 more
Run Code Online (Sandbox Code Playgroud)
根据这个答案,因为ShortTypeHandling直到2.3.x才添加.所以我现在想附加groovy-all-2.3.3.jar到我的Eclipse项目的类路径.
问题是我似乎没有编辑权限来更改库在Groovy Libraries库中使用的库.当我手动将2.3.3 JAR添加到我的构建路径时,我收到以下错误:
Caught: java.lang.ExceptionInInitializerError
java.lang.ExceptionInInitializerError
Caused by: groovy.lang.GroovyRuntimeException: Conflicting module versions. Module [groovy-all is loaded in version 2.1.5 and you are trying to load version 2.3.3
Run Code Online (Sandbox Code Playgroud)
我有什么选择?
最近我下载了Groovy-2.3.6并尝试在Linux系统上安装它.我按照http://groovy-lang.org/install.html的说明进行操作.我设置了GROOVY_HOME变量.
export GROOVY_HOME=/home/work/Software/groovy-2.3.6
Run Code Online (Sandbox Code Playgroud)
然后我将我的环境路径变量设置为Groovy bin文件夹
export PATH=$PATH:/home/work/Software/groovy-2.3.6/bin
Run Code Online (Sandbox Code Playgroud)
已创建JAVA_HOME变量.
现在,当我尝试运行任何Groovy命令时,它会生成以下错误
Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/groo/tool/GroovyStarter
Caused by: java.lang.ClassNotFoundException: org.codehaus.groovy.tools.GroovyStarter
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: org.codehaus.groovy.tools.GroovyStarter. Program will exit.
Run Code Online (Sandbox Code Playgroud)
我正在通过一些网站来解决这个问题.我发现如果我设置了错误的GROOVY_HOME路径,那么它就会发生.我无法弄清楚该变量的正确路径应该是什么.任何人都可以帮我这个.谢谢
当我想从http://groovy-lang.org/download.html下载 groovy 时,我得到了“二进制版本”。这意味着我有一个带有lib和bin和embeddable文件夹的目录结构。在bin文件夹中有一个groovyshell 脚本,让我可以执行我自己的 groovy 源文件。此groovyshell 脚本使用lib目录中的 jars 。但是,我希望它使用embeddable目录中groovy-all-jar 中的 jars 。原因是,我不希望jar在我的类路径中的目录中的所有 jars,因为我需要使用不同的版本。
如何groovy使用 groovy-all-jar制作shell 脚本?