Groovy @从JSR223抓取注释

Groovy @从JSR223抓取注释,groovy,scriptengine,Groovy,Scriptengine,我有一个groovy脚本,可以自动运行,理想情况下使用JSR223(Java平台上的脚本) @Grab-resolve进程在控制台中工作,当我将其作为外部进程执行时也是如此。但是,使用Groovy 1.8.6中的ScriptEngine无法工作。问题是ScriptEngine不尊重@Grab,我得到了java.lang.ClassNotFoundException:org.apache.ivy.core.report.ResolveReport 有人已经解决了这个问题吗?这对我很有用: Grab

我有一个groovy脚本,可以自动运行,理想情况下使用JSR223(Java平台上的脚本)

@Grab-resolve进程在控制台中工作,当我将其作为外部进程执行时也是如此。但是,使用Groovy 1.8.6中的ScriptEngine无法工作。问题是ScriptEngine不尊重@Grab,我得到了java.lang.ClassNotFoundException:org.apache.ivy.core.report.ResolveReport

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

这对我很有用:

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
tyvm。。。 添加

编译组:“org.codehaus.groovy”,名称:“groovy all”,版本:“3.0.1”

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


在我的身材中,格拉德尔做到了ivy在“运行时”需要Grapes才能工作

问题是我没有设置类路径,Maven也没有(缺少ivy依赖项)。人工依赖常春藤后,问题就解决了。