java - 如何使用Nailgun Server启动Groovy脚本(或Java类)

我正在开发一个groovy shell脚本,它经常被启动(做一些很小的任务),因此我需要一个快速的jvm启动时间。为了达到这个目的,我正试图用Nailgun启动它。
我已经安装了一个ubuntu包nailgun。然后我将/usr/bin/ng-server链接到/usr/bin/ng来修复argument bug。我像这样启动钉枪服务器:

java -cp /usr/share/java/nailgun-0.7.1.jar -server com.martiansoftware.nailgun.NGServer

我有一个名为hello.groovy的简单的虚拟groovy脚本,只是为了测试nailgun服务器:
#!/usr/bin/env groovy
def sayHello() {
  println("Hello Groovy!");
}

sayHello();

我用groovyc将文件编译成hello.class。
现在我想在Nailgun服务器中启动这个脚本。我天真的做法是:
ng hello
ng hello.sayHello

但我得到的只是ClassNotFoundException:
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服务器启动groovy脚本的正确方法是什么?我也很感激一些关于如何使用钉枪的好网站/教程,很难得到任何关于如何使用它的信息…
编辑:
我也希望有一个完整的例子(包括如何用ng调用一个特定的类)来使用nailgun和纯java类,因为我也不能让ng使用任何java类。

最佳答案

终于明白了。我只是不明白我必须先将所有需要的类添加到nailgun类路径中(this SO question给出了最后的提示)。
首先,将groovy添加到类路径:

ng ng-cp /usr/share/java/groovy-all.jar

然后将包含groovy script/java类的目录添加到类路径,在我的例子中是:
ng ng-cp /home/$USER/tools/groovy

现在我可以像这样用Nailgun运行我的Groovy脚本:
ng hello

本文翻译自 https://stackoverflow.com/questions/6761054/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 java groovy jvm nailgun


相关文章:

java - 如何使这个(github)源变成一个库/ jar?

java - Android无法捕获Jersey RESTful异常

java - java如何从大小约为800x600的图像中获取平均RGB值

java - 您如何测试事务数据库代码?

java - 使用本机API的替代解决方案:JVM_LoadClass0,JVM_AllocateNewArray和JVM_AllocateNewObject

java - Java的CoffeeScript [关闭]

java - 只能在Java sql上使用有限数量的方法

java - 根据多个键对地图进行排序[关闭]

java - Groovy闭包可以扩展抽象类

java - 通过JNI从C ++应用程序创建JVM后无法找到类