Ewaluacja skryptu z pliku (JSR-223, Groovy Script)
Aby ewaluować skrypt używamy metody Object eval(Reader reader)
klasy SriptEngine
.
Nasz projekt wygląda tak:
Skrypt skrypt1.groovy
Jest to ten sam skrypt, który wcześniej był umieszczony w stringu.
package scripts println("Cześć! Jestem Groovy! Uczę się polskiego: ąćęłńóśźż")
Skrypt skrypt2.groovy
Jest to ten sam skrypt, który wcześniej był umieszczony w stringu.
package scripts int power(int n) { 2**n } a = 6 result = power(a) println("power($a) = $result")
Klasa E03_EvalScriptFromFile1.java
Ewaluujemy skrypt skrypt1.groovy.
package jsr223groovy; import java.io.IOException; import java.io.Reader; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class E03_EvalScriptFromFile1 { public static void main(String[] args) { String fileName = "src/scripts/skrypt1.groovy"; Path path = Paths.get(fileName); if (! Files.exists(path) ) { System.out.println(path.toAbsolutePath() + " nie istnieje."); return; } ScriptEngineManager sem = new ScriptEngineManager(); ScriptEngine se = sem.getEngineByName("Groovy"); try { Reader reader = Files.newBufferedReader(path); se.eval(reader); } catch (IOException | ScriptException e) { e.printStackTrace(); } } }
Po uruchomieniu klasy na konsoli zobaczymy:
Cześć! Jestem Groovy! Uczę się polskiego: ąćęłńóśźż
Klasa E03_EvalScriptFromFile2.java
Ewaluujemy skrypt skrypt2.groovy.
package jsr223groovy; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; import java.io.IOException; import java.io.Reader; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class E03_EvalScriptFromFile2 { public static void main(String[] args) { String fileName = "src/scripts/skrypt2.groovy"; Path path = Paths.get(fileName); if (! Files.exists(path) ) { System.out.println(path.toAbsolutePath() + " nie istnieje."); return; } ScriptEngineManager sem = new ScriptEngineManager(); ScriptEngine se = sem.getEngineByName("Groovy"); try { Reader reader = Files.newBufferedReader(path); se.eval(reader); } catch (IOException | ScriptException e) { e.printStackTrace(); } } }
Po uruchomieniu klasy na konsoli zobaczymy:
power(6) = 64
Klasa module-info.java
module jsr223groovy { requires org.apache.groovy; requires java.scripting; requires java.sql; }