我正在开发一个Groovy脚本,它经常被启动(执行相当小的任务),因此我需要一个快速的JVM启动时间。为了达到这个目的,我尝试用钉枪启动它。
我已经安装了Nailgun作为Ubuntu包。然后,我通过将论证错误链接到/usr/bin/ng-server到/usr/bin/ng来修复/usr/bin/ng。我要像这样启动Nailgun:
java -cp /usr/share/java/nailgun-0.7.1.jar -server com.martiansoftware.nailgun.NGServer我有一个名为hello.groovy的简单虚拟Groovy脚本,只用于测试钉枪服务器:
#!/usr/bin/env groovy
def sayHello() {
println("Hello Groovy!");
}
sayHello();我用groovyc将文件编译成hello.class。
现在我想在Nailgun服务器上启动这个脚本。我这么做的天真方法是:
ng hello
ng hello.sayHello但我得到的只有ClassNotFoundExceptions:
java.lang.ClassNotFoundException: hello
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at com.martiansoftware.nailgun.NGSession.run(Unknown Source)那么,用Nailgun Server启动我的Groovy脚本的正确方法是什么?我也很感激一些关于如何使用Nailgun的好网站/教程,很难获得如何使用它的任何信息。
编辑:
我还想要一个完整的示例(包括如何用ng调用特定的类),以便在纯Java类中使用钉枪,因为我也无法使用任何Java类。
发布于 2011-07-21 14:27:57
终于明白了。我只是不明白我必须首先向Nailgun类路径添加所有需要的类(这个问题给了我最后的提示)。
首先,将Groovy添加到类路径中:
ng ng-cp /usr/share/java/groovy-all.jar然后将包含Groovy脚本/Java类的目录添加到类路径中,在我的示例中是:
ng ng-cp /home/$USER/tools/groovy现在,我可以像这样使用Nailgun运行Groovy脚本了:
ng hello发布于 2011-07-20 14:49:00
我认为jruby.org最近提到了这件丢失已久的武器(甲骨文总有一天会接手,因为缓慢的冷启动对大多数新鸟类来说是致命的弱点)。
你把你的剧本写进课堂了吗?
然后在类路径上使用groovy的“ng.hello”
我的盲目猜测(在使用rvm维护jRuby之后,懒得重新安装栏杆)
发布于 2011-07-22 10:20:21
如果运行的hello是hello.groovy (解释的)而不是编译下来的hello.class,我会感到惊讶。
不是一个可持续的解决方案,他们应该有一个用于热启动客户端JVM的JSR。
这样,客户机模式下的JVM就会进入后台守护进程,等待生成一个java进程,并清除所有性能不佳的虚幻
当然,为了安全起见,生产将始终使用整个热点。
https://stackoverflow.com/questions/6761054
复制相似问题