According to the documentation for javax.script.ScriptEngine, the key javax.script.ScriptEngine.FILENAME should point to the current file being executed. And it does, when executing a local file.
But when executing a file from a URL using load(), it does not work. I can reliably get the URL using some rigamarole (see below), but I'd like a method that's portable across JDK 6-8 (or so). Here's the output of the following snippet when executing locally: Snippet: Packages.java.lang.System.out.println("stack = " + new Packages.java.lang.Throwable().getStackTrace()[0].getFileName()); var global = (function() { return this; })(); Packages.java.lang.System.out.println("javax.script.filename = " + global[String(Packages.javax.script.ScriptEngine.FILENAME)]); Output under JDK 8 locally: stack = rhino/jrunscript/api.js javax.script.filename = rhino/jrunscript/api.js Output under JDK 8 executing over HTTP via -e load('url'): stack = http://bitbucket.org/api/1.0/repositories/davidpcaldwell/jrunscript/raw/local/api.js?test=filename javax.script.filename = <string> And further inspection indicates that's a *string* "<string>" Here's JDK 7 for comparison: Output under JDK 7 locally: stack = NativeConstructorAccessorImpl.java javax.script.filename = rhino/jrunscript/api.js Output under JDK 7 executing over HTTP via -e load('url'): stack = NativeConstructorAccessorImpl.java javax.script.filename = http://bitbucket.org/api/1.0/repositories/davidpcaldwell/jrunscript/raw/local/api.js?test=filename Thoughts? -- David P. Caldwell http://www.davidpcaldwell.com/