Pobieranie parametrów ze skryptów
Mamy skrypt zawierający parametry. Wykonujemy skrypt i sprawdzamy gdzie umieszczone zostały parametry ze skryptu. Zwróćmy uwagę, że parametry zostały podane jako a = 125
oraz b = 3
.
Klasa E10_AccessingParamsFromScript1.java
package jsr223groovy; import javax.script.ScriptContext; 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 E10_AccessingParamsFromScript1 { public static void main(String[] args) { ScriptEngineManager sem = new ScriptEngineManager(); ScriptEngine se = sem.getEngineByName("Groovy"); String fileName = "src/scripts/skrypt4.groovy"; Path path = Paths.get(fileName); if (! Files.exists(path) ) { System.out.println(path.toAbsolutePath() + " nie istnieje."); return; } ScriptContext sc = se.getContext(); try { Reader reader = Files.newBufferedReader(path); se.eval(reader); } catch (IOException | ScriptException e) { e.printStackTrace(); } System.out.println("sem: " + sem.get("a")); System.out.println("se: " + se.get("a")); System.out.println("sc: " + sc.getAttribute("a", ScriptContext.ENGINE_SCOPE)); System.out.println("sem: " + sem.get("b")); System.out.println("se: " + se.get("b")); System.out.println("sc: " + sc.getAttribute("b", ScriptContext.ENGINE_SCOPE)); } }
Skrypt skrypt4.groovy
span class="s0">package scripts a = 125 b = 3 def dividing(int a, int b){ def a1 = a.intdiv(b) def a2 = a % b def res = [a1, a2] as int[] return res; } result = dividing(a,b) println("dividing($a, $b) = $result")
Po uruchomieniu klasy na konsoli zobaczymy:
dividing(125, 3) = [41, 2] sem: null se: 125 sc: 125 sem: null se: 3 sc: 3
Widzimy, że parametry umieszczone w skrypcie zostały umieszczone w zasięgu silnika.
Klasa module-info.java
module jsr223groovy { requires org.apache.groovy; requires java.scripting; requires java.sql; exports jsr223groovy; opens jsr223groovy; }