@Grab аннотация, работающая от JSR 223 - PullRequest
1 голос
/ 21 марта 2012

У меня есть отличный сценарий, который я хотел бы запустить автоматически, в идеале используя JSR 223 (Сценарии на платформе Java).

Процесс разрешения @Grab работает как из консоли, так и когда я выполняю его как внешний процесс. Однако он не работает с использованием ScriptEngine из Groovy 1.8.6. Проблема в том, что ScriptEngine не будет уважать @Grab, и я получаю исключение java.lang.ClassNotFoundException: org.apache.ivy.core.report.ResolveReport.

Кто-нибудь уже решил это?

1 Ответ

1 голос
/ 21 марта 2012

Это работает для меня:

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
...