Skip to content

Instantly share code, notes, and snippets.

@grofoli
Created December 5, 2018 23:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save grofoli/ac795868f24190d5698de8b33909dc90 to your computer and use it in GitHub Desktop.
Save grofoli/ac795868f24190d5698de8b33909dc90 to your computer and use it in GitHub Desktop.
Kotlin JSR 223 Scripting
<properties>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
<kotlin.version>1.3.10</kotlin.version>
</properties>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>${kotlin.version}</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-compiler-embeddable</artifactId>
<version>${kotlin.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-script-runtime</artifactId>
<version>${kotlin.version}</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-script-util</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
org.jetbrains.kotlin.script.jsr223.KotlinJsr223JvmLocalScriptEngineFactory
package analytical;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.util.Arrays;
import java.util.List;
public class ScriptExample {
public static void main(String[] args) {
System.setProperty("idea.use.native.fs.for.win", "false");
ScriptEngine engine = createKotlinScriptEngine();
String predicate = "name.equals(\"Foo\")";
String analyticScript =
String.format("println((bindings[\"records\"] as List<analytical.ScriptExample.Transport>).filter { it.%s } )", predicate);
List<Transport> transports = Arrays.asList(new Transport("Foo"), new Transport("Bar"));
// Add Java object to script engine
engine.put("records", transports);
try {
engine.eval(analyticScript);
} catch (ScriptException exception) {
exception.printStackTrace();
}
}
private static ScriptEngine createKotlinScriptEngine() {
ScriptEngineManager engineManager = new ScriptEngineManager();
ScriptEngine engine = engineManager.getEngineByExtension("kts");
for (ScriptEngineFactory factory : engineManager.getEngineFactories()) {
System.out.println(factory.getEngineName());
System.out.println("\t" + factory.getLanguageName());
}
if (engine == null) {
System.out.println("Engine missing");
System.exit(1);
}
return engine;
}
public static class Transport {
public String name;
public Transport(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public String toString() {
return name;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment