JSR-223 is designed to allow Java access to many scripting languages. This means that it also provides hooks for Groovy to those other languages.
JSR-223 comes with Java 6. Here is how you can use it. First we define a script manager:
mgr = new javax.script.ScriptEngineManager()
Now, we can call out to JavaScript:
println 'javascript: ' + mgr.getEngineByName("javascript").eval('''
function factorial(n) {
if (n == 0) {
return 1;
}
return n * factorial(n - 1);
}
factorial(4)
''')
Or JRuby:
println 'jruby: ' + mgr.getEngineByName("jruby").eval('''
def factorial(n)
if n == 0
1
else
n * factorial(n - 1)
end
end
factorial(4)
''')
Or Jython:
engine = mgr.getEngineByName("jython")
engine.eval('''
def factorial(n):
i=fact=1
while i <= n:
fact=fact*i
i=i+1
return fact
result = factorial(4)
''')
println 'jython: ' + engine.result
Or Jaskell:
engine = mgr.getEngineByName("jaskell")
engine.eval('factorial n = if n > 0 then n * factorial (n-1) else 1')
println 'jaskell: ' + engine.eval('factorial 4')
The output from running these scripts is:
See also: Accessing Groovy from Java via JSR-223