2014-11-11 2 views
3

nashorn을 사용하여 Java에서 bash 쉘 명령을 실행해야합니다. 나는 다음과 같은 오류가 위의 방법을 실행에자바에서 nashorn을위한 스크립팅 모드 활성화

public void executeScript(){ 

    ScriptEngineManager engineManager = new ScriptEngineManager(); 
    ScriptEngine engine = engineManager.getEngineByName("nashorn"); 

    engine.eval(new FileReader("script.js")); 

    Invocable invocable = (Invocable)engine; 
    invocable.invokeFunction("testBashMethod"); 
} 

:

#!/usr/bin/jjs 

var testBashMethod = function(name){ 

    $EXEC("echo Hello from bash ${name}"); 
}; 

testBashMethod("foobar"); 

내가 자바 방법 Nashorn 엔진에 자바 스크립트 위의 방법을로드하고 실행이 :

나는 자바 스크립트 파일이 :

jdk.nashorn.internal.runtime.ECMAException: ReferenceError: "$EXEC" is not defined 

내 생각 엔 nashorn engi ne의 스크립트 모드. 내가 스크립팅 모드 엔진을 실행할 수있는 터미널에 는 다음이 성공적으로 실행 :

jjs -scripting 
jjs> $EXEC('echo Hello World..!!') 

내 질문 :가 어떻게 스크립트 모드에서 자바의 nashorn 엔진을로드 할 수 있습니까? bash 스크립팅 방법을 사용할 수 있습니다. 아니면 제가 놓친 다른 것이 있습니다.

도움 주셔서 감사합니다.

답변

9
NashornScriptEngineFactory factory = new NashornScriptEngineFactory(); 
ScriptEngine engine = factory.getEngine(new String[] { "-scripting" }); 

자세한 내용은 Nashorn Wiki을 참조하십시오. 위의 코드 조각을 Nashorn jsr223 engine notes 페이지에서 가져 와서 수정했습니다.

1

또한 "nashorn.args"시스템 속성을 통해 nashorn 옵션을 정의 할 수도 있습니다. 그래서, 뭔가

같은 자바 -Dnashorn.args = -scripting MyMainClass

이 작동하고 코드가 API를 (jdk.nashorn.api.scripting API를 사용할 필요가 없습니다) javax.script의에 충실 할 수 있습니다. 그러나 이는 자바 프로세스에 의해 생성 된 모든 엔진이 스크립팅 모드를 사용할 수 있음을 의미합니다.

관련 문제