in src/main/java/org/apache/maven/plugins/scripting/engine/JavaEngine.java [193:253]
private String toSource(String pck, String name, String script) {
final String[] importsAndScript = splitImportsAndScript(script);
return "package " + pck + ";\n"
+ "\n"
+ "import java.io.*;\n"
+ "import java.net.*;\n"
+ "import java.util.*;\n"
+ "import java.util.stream.*;\n"
+ "import java.nio.file.*;\n"
+ "import org.apache.maven.project.MavenProject;\n"
+ "import org.apache.maven.plugin.logging.Log;\n"
+ "\n"
+ "import javax.script.Bindings;\n"
+ "import javax.script.CompiledScript;\n"
+ "import javax.script.ScriptContext;\n"
+ "import javax.script.ScriptEngine;\n"
+ "import javax.script.ScriptException;\n"
+ "\n"
+ importsAndScript[0] + '\n'
+ "\n"
+ "public class " + name + " extends CompiledScript implements AutoCloseable {\n"
+ " private final ScriptEngine $engine;\n"
+ " private final URLClassLoader $loader;\n"
+ "\n"
+ " public " + name + "( ScriptEngine engine, URLClassLoader loader) {\n"
+ " this.$engine = engine;\n"
+ " this.$loader = loader;\n"
+ " }\n"
+ "\n"
+ " @Override\n"
+ " public Object eval( ScriptContext $context) throws ScriptException {\n"
+ " final Thread $thread = Thread.currentThread();\n"
+ " final ClassLoader $oldClassLoader = $thread.getContextClassLoader();\n"
+ " $thread.setContextClassLoader($loader);\n"
+ " try {\n"
+ " final Bindings $bindings = $context.getBindings(ScriptContext.GLOBAL_SCOPE);\n"
+ " final MavenProject $project = MavenProject.class.cast($bindings.get(\"project\"));\n"
+ " final Log $log = Log.class.cast($bindings.get(\"log\"));\n"
+ " " + importsAndScript[1] + "\n"
+ " return null;\n" // assume the script doesn't return anything for now
+ " } catch ( Exception e) {\n"
+ " if (RuntimeException.class.isInstance(e)) {\n"
+ " throw RuntimeException.class.cast(e);\n"
+ " }\n"
+ " throw new IllegalStateException(e);\n"
+ " } finally {\n"
+ " $thread.setContextClassLoader($oldClassLoader);\n"
+ " }\n"
+ " }\n"
+ "\n"
+ " @Override\n"
+ " public ScriptEngine getEngine() {\n"
+ " return $engine;\n"
+ " }\n"
+ "\n"
+ " @Override\n"
+ " public void close() throws Exception {\n"
+ " $loader.close();\n"
+ " }\n"
+ "}";
}