来自JSR 223的@Grab注释

时间:2012-03-21 13:50:40

标签: groovy scriptengine

我有一个groovy脚本,我会自动运行,理想情况下使用JSR 223(Java平台上的脚本)。

@Grab解析过程正在从控制台以及我作为外部进程执行时。但是,使用Groovy 1.8.6中的ScriptEngine无法正常工作。问题是ScriptEngine不会尊重@Grab而我正在获取java.lang.ClassNotFoundException:org.apache.ivy.core.report.ResolveReport。

有人已经解决了这个问题吗?

2 个答案:

答案 0 :(得分:1)

这对我有用:

<强> GrabTestJSR233.java:

import javax.script.ScriptEngine ;
import javax.script.ScriptEngineManager ;

public class GrabTestJSR223 {
  public static void main( String[] args ) throws Exception {
    ScriptEngineManager factory = new ScriptEngineManager() ;
    ScriptEngine engine = factory.getEngineByName( "groovy" ) ;
    String script = "@Grab( 'commons-lang:commons-lang:2.6' )\n" +
                    "import org.apache.commons.lang.StringUtils\n"+
                    "\n" +
                    "println StringUtils.join( 'a', 'b', 'c' )" ;

    engine.eval( script ) ;
  }
}

编译:

javac GrabTestJSR223.java

然后,运行:

java -cp $GROOVY_HOME/lib/*:. GrabTestJSR223

我得到了输出:

abc

答案 1 :(得分:1)

tyvm ... 添加

<块引用>

编译组:'org.codehaus.groovy',名称:'groovy-all',版本:'3.0.1'

编译组:'org.apache.ivy',名称:'ivy',版本:'2.5.0'

在我的 build.gradle 中做到了。 ivy 在“运行时”时需要 Grapes 才能工作