草庐IT

groovy++

全部标签

java - 防弹 groovy 脚本嵌入

我正在开发一个可以通过用户提供的Groovy脚本扩展的服务器应用程序。很明显,我想确保这些脚本在一个非常紧凑的沙箱中运行,在沙箱中它们不会破坏核心应用程序代码或消耗太多资源而使服务器过载。我研究了各种可能性,最终的解决方案可能是这些的组合:在非常受限的安全管理器中运行脚本。该脚本在无权限的SecurityManager中运行。必须声明其他权限(如Android)。启动一个新的JVM。在Runtime.exec周围创建一个ScriptProcess包装器,并生成一个带有安全管理器、有限堆等的新JVM。因为我们启动了一个成熟的进程,我们可能会更好地控制监控不良行为?虽然资源成本会非常高..

java - 为什么 Groovy 用 size() 替换 java.lang.String.length()?

维基百科的currentarticle关于Groovy编程语言的解释是“大多数有效的Java文件也是有效的Groovy文件”,并给出了以下示例,首先是Java代码:for(Stringit:newString[]{"Rod","Carlos","Chris"})if(it.length()然后在Groovy中也是如此:["Rod","Carlos","Chris"].findAll{it.size()请注意,在第一个示例中,我们使用了非常普通的Java方法java.lang.String.length().在第二个示例中,此方法被神秘地替换为对名为size()的方法的调用。我有veri

java - Groovy - 主要方法放置

这是我的代码:classcat{}classdog{staticvoidmain(String[]args){}}当编译groovy时说我没有main方法。但是当我摆脱cat类时:classdog{staticvoidmain(String[]args){}}它有效。我想,只要我在任何类中有main方法,代码就有效,但我错了。有人可以解释为什么当主要方法驻留在其中一个类中时我不能有多个类吗? 最佳答案 你可以有多个类,但首先定义的类必须有main方法实现。通常当作为脚本运行时,脚本在run()方法中执行。如果您定义了一个类,则该类的

java - maven 编译 groovy

我遇到这样一种情况,我的一些groovy代码引用了我的java文件,但我也有不同的java文件引用了相同的groovy代码。当尝试在maven中编译时,我要么需要在java之前或之后编译groovy,但由于groovy代码依赖于一些java文件,而不同的java文件依赖于groovy代码,所以这不会真正起作用。有没有办法处理这种依赖性? 最佳答案 是的,只需使用GMaven.由于它是一个联合编译器,它会自动管理您的java到groovy和groovy到java的依赖关系。简而言之,您需要:在你的pom.xml中包含gmaven-pl

java - Groovy 泛型失败

除了groovy比java更动态...为什么这是groovy中的编译时错误(意外标记):interfaceA{TgetByClass(Classclazz)}如何以常规方式编写此代码? 最佳答案 Groovy解析器不处理methodsignaturesbeginningwithGenericinformation...如果你添加public修饰符,它会解析:interfaceA{publicTgetByClass(Classclazz)}虽然我不相信你会在编译时获得任何类型检查来添加这个注解

java - Groovy 中的匿名代码块

有没有办法在Groovy中使用匿名代码块?例如,我正在尝试将以下Java代码转换为Groovy:{inti=0;System.out.println(i);}inti=10;System.out.println(i);我能想到的最接近的翻译如下:booleangroovyIsLame=trueif(groovyIsLame){inti=0printlni}inti=10printlni我知道匿名代码块通常是一种反模式。但是使用名称如“inputStream0”和“inputStream1”的变量也是一种反模式,因此对于我正在处理的这段代码,匿名代码块会有所帮助。

java - 如何在不使用 -cp 开关的情况下在 Groovy 中自动加载数据库 jar?

我想简化调用Oracle数据库的Groovy脚本的执行。如何将ojdbcjar添加到默认类路径以便我可以运行:groovyRunScript.groovy代替:groovy-cpojdbc5.jarRunScript.groovy 最佳答案 摘自GroovyRecipes,作者ScottDavis,AutomaticallyIncludingJARsinthe./groovy/libDirectory:在您的登录目录中创建.groovy/lib取消注释${GROOVY_HOME}/conf/groovy-starter.conf中的

java - groovy 中的闭包与 java 8 中的闭包(lambda 表达式)?

给定doSomething(Functionfoo){printlnfoo(2)}Groovy:doSomething({it*it}作为函数)Java:doSomething((x)->x*x)这两者有什么区别吗? 最佳答案 在Groovy中,闭包是groovy.lang.Closure类型的一等公民,而Java8中的lambda是它们所代表的默认方法接口(interface)的实际实例。这意味着您需要在Groovy中使用as关键字(如您所示),但或者,在Java中您需要指定一个接口(interface),因此在Groovy中,您

java - Groovy 异常后重试

在Ruby中,我可以写:begindo_something#exceptionraisedrescue#handleserrorretry#restartfrombeginningendGroovy/Java中有类似的东西吗?我找到了this但也许有更好的东西? 最佳答案 您可以在Groovy中构建自己的辅助方法来封装此重试逻辑。defretry(inttimes=5,ClosureerrorHandler={e->log.warn(e.message,e)},Closurebody){intretries=0defexceptio

java - Java 风格的 Groovy 和 Java 一样快吗?

如果我理解正确的话,Groovy是动态类型的,但因为它几乎是Java的超集,所以可以选择提供静态类型信息。如果编写只有少数部分对性能至关重要的内容,同时避免使用多种语言的摩擦,这可能会很有用。只能为性能关键部分提供类型注释。在使用类Java子集并提供静态类型注释的函数/类中使用Groovy而不是Java的性能损失是什么? 最佳答案 在groovy中声明类型并不能神奇地加快速度。它仍然是groovy代码,需要通过MOP以防某些内容发生动态更改。您不会仅仅因为提供了类型信息就获得了静态链接。对于groovy代码速度不够快的性能敏感的事情