Tag: 脚本

什么基于JVM的脚本语言支持@WebService在运行时创建服务?

我处于这样一种情况,我需要能够在运行时创建和公开Web服务。 (即没有“javac” – 编译步骤)。 是否有基于JVM的脚本语言对JAX-WS有很好的支持,因此我可以用Java编写中央引擎,然后让脚本语言创建包含Web服务方法的片段(使用@WebService或@WebMethod注释) )然后可以传递给 http://docs.oracle.com/javase/6/docs/api/javax/xml/ws/Endpoint.html#publish(java.lang.String,java.lang.Object) 如果可能的话,请提供一个如何正确执行此操作的示例。 有什么建议么?

运行具有外部依赖项的Scala脚本

我在/Users/joe/.scala/lib下面有以下jar: commons-codec-1.4.jar httpclient-4.1.1.jar httpcore-4.1.jar commons-logging-1.1.1.jar httpclient-cache-4.1.1.jar httpmime-4.1.1.jar 下面是我用scala编写的test.sh。 #!/bin/sh -v L=`cd /Users/joe/.scala/lib;pwd` cp=`echo $L/*.jar|sed ‘s/ /:/g’` echo $cp exec scala -classpath $cp $0 $@ !# println(new org.apache.commons.httpclient.HttpClient()) 这是我得到的错误: $ ./test.sh #!/bin/sh -v L=`cd /Users/joe/.scala/lib;pwd` cd /Users/joe/.scala/lib;pwd cp=`echo $L/*.jar|sed ‘s/ /:/g’` echo $L/*.jar|sed ‘s/ /:/g’ echo $cp /Users/joe/.scala/lib/commons-codec-1.4.jar:/Users/joe/.scala/lib/commons-logging-1.1.1.jar:/Users/joe/.scala/lib/httpclient-4.1.1.jar:/Users/joe/.scala/lib/httpclient-cache-4.1.1.jar:/Users/joe/.scala/lib/httpcore-4.1.jar:/Users/joe/.scala/lib/httpmime-4.1.1.jar exec scala -classpath $cp $0 $@ /Users/joe/Desktop/scala/./test.sh:7: error: […]

沙盒JSR-223

我正在尝试沙箱JSR-223。 具体来说,我不希望任何脚本可以访问我的任何类。 (我听说Rhino可以用ClassShutter做到这一点,但我想一般这样做。即对于JSR-223的所有脚本引擎)。 我首先尝试使用AccessController.doPrivileged解决方案, 完全不传递任何权限 。 它适用于大多数权限,但脚本仍然可以访问我的所有公共类(它似乎忽略“包访问”权限……?)。 我找到了这个 。 我的问题是:如何在脚本引擎上安装自定义ClassLoader? (或者,如果必须,如何全局替换ClassLoader?)

使用Java for OSX编写可执行的.sh文件

所以我正在尝试编写一个可执行的.sh文件,这就是我目前正在编写的文件: Writer output = null; try { output = new BufferedWriter(new FileWriter(file2)); output.write(shellScriptContent); output.close(); } catch (IOException ex) { Logger.getLogger(PunchGUI.class.getName()).log(Level.SEVERE, null, ex); } 所以写文件就好了,但它不可执行。 有没有办法在我写它时改变可执行文件的状态? 编辑:为了进一步澄清,我试图使其默认执行,因此,例如,如果您双击生成的文件,它将自动执行。

是否有一种与语言无关的方法来向JSR223脚本绑定添加函数?

JSR223 Bindings类允许您将任意Java对象公开给脚本语言。 但他们必须是对象。 我想定义一个函数quit() ,它可以从脚本环境调用,在Java中变成quitObject.run() 。 但是JSR223没有定义函数对象的概念。 是否有一种与语言无关的方式在Javascript中执行以下操作,即采用Runnable()并在脚本环境中创建函数? static private Object asFunction(ScriptEngine engine, Runnable r) throws ScriptException { final Bindings bindings = engine.createBindings(); bindings.put(“r”, r); return engine.eval( “(function (r) { var f = function() { r.run(); }; return f;})(r)”, bindings); } Runnable quitObject = /* get/create a Runnable here */ Bindings bindings = engine.createBindings(); bindings.put(“quit”, […]

使用Rhino解释Java中的JavaScript:暂停/恢复脚本

我正在使用JDK的javax.script。*包。 具体来说,我正在使用JavaScript引擎,根据我的阅读,它似乎基于一个名为Rhino的Mozilla开发的JavaScript-in-Java解释器。 我希望完成的是基本上让我的JavaScript能够在代码中的某个点“暂停”自己(比如说,在函数调用的中途),并且只有在Java允许它执行时才会自动恢复。 为了说明我的意思,想象一下这个JavaScript代码: function myJSFunction() { print(“Hello “); mysteriousPauseFunction(); // this is the part I’m wondering about. basically, the script should break here and resume later at Java’s discretion… // upon reaching this comment, we know now that Java has told JavaScript that it’s okay to resume, so the next line will now be […]

使用Nashorn编写Java脚本(JSR 223)和预编译

我通过JSR 223使用Nashorn来执行用户输入脚本的小片段: public Invocable buildInvocable(String script) throws ScriptException { ScriptEngine engine = new ScriptEngineManager().getEngineByName(ENGINE); engine.eval(functions); engine.eval(script); return (Invocable) engine; } 变化的用户脚本调用在静态中央库中定义的JavaScript函数(保存在上面代码片段中的functions String中)。 每当我想要获取一个可以从我的Java调用的Invocable ,我就不得不重新编译大型库代码。 有没有办法用新代码加入以前编译的代码片段?

如何将包装shell脚本中的参数传递给Java应用程序?

我想在命令行(linux和mac)上运行我正在创建的Java程序。 我不想一直输入“java”和参数,所以我在考虑创建包装器脚本。 有什么最好的方法可以让它们在任何地方工作? 我也希望能够传递参数。 我正在考虑使用“shift”来做到这一点(删除第一个参数)。 如果不使用脚本,有没有更好的方法呢? 也许制作一个不需要通过“java”命令调用的可执行文件?

如何从代码库中删除System.out.println

我们有一个庞大的(旧的遗留Java)代码库,其中许多文件(大约5k)都有System.out.println。 我们计划因清理/性能原因删除它们。 我们如何编写一个脚本来替换它们而不会在代码中引入任何问题? 脚本不能盲目删除它们,因为以下情况可能是一个问题: if () some.code… else System.out.println(…); DB.close(); 我想用’;’代替它们。 这将照顾上述情况。 你还有其他问题吗? 还有其他建议吗?

Java ScriptEngine的安全问题

我刚刚开始使用Java ScriptEngine对我的应用程序进行一些扩展,然后我注意到我可以导入脚本中的所有java类并使用它们而没有任何限制。 有没有办法指定脚本可以使用哪些类? 我不希望他们做像java.lang.System.exit(1);