3

頻繁に起動される(かなり小さなタスクを実行する)Groovyシェルスクリプトを開発しているため、JVMの起動時間を短縮する必要があります。それを達成するために、私はネイルガンでそれを起動しようとしています。

NailgunをUbuntuパッケージとしてインストールしました。次に、にリンクして引数のバグを修正しました。私はこのようにNailgun-Serverを起動しています:/usr/bin/ng-server/usr/bin/ng

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サーバーでGroovyスクリプトを起動する正しい方法は何ですか?また、ネイルガンの使い方に関するいくつかの良いサイト/チュートリアルをいただければ幸いです。ネイルガンの使い方に関する情報を得るのは本当に難しいです...

編集:

また、純粋なJavaクラスでネイルガンを使用するための完全な例(特定のクラスがngで呼び出される方法を含む)もありがたいです。ngをJavaクラスで動作させることもできなかったからです。

4

3 に答える 3

5

最後にそれを手に入れました。最初に必要なすべてのクラスを Nailgun クラスパスに追加する必要があることを理解していませんでした (この SO の質問で最終的なヒントが得られました)。

まず、Groovy をクラスパスに追加します。

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

次に、Groovy スクリプト/Java クラスを含むディレクトリをクラスパスに追加します。私の場合は次のとおりです。

ng ng-cp /home/$USER/tools/groovy

これで、Groovy スクリプトを次のように Nailgun で実行できます。

ng hello
于 2011-07-21T14:27:57.877 に答える
0

jruby.org には、この長く失われた武器に関する最新の参照があると思います (ほとんどの新しい鳥にとって、遅いコールド スタートはアキレス腱であるため、いつの日かオラクルが取り上げるはずです)。

スクリプトをクラスに groovy しましたか?

次に、クラスパスに groovy を指定して「ng ... hello」

私の盲目的な推測(rvmを使用してjRubyを維持した後、レールガンを再インストールするのが面倒です)

于 2011-07-20T14:49:00.360 に答える
0

実行される hello が hello.groovy (解釈済み) であり、コンパイルされたダウンした hello.class ではない場合、私は驚かれることでしょう。

持続可能なソリューションではなく、ホット スタート クライアント JVM 用の JSR が必要です。

クライアントモードのJVMがバックグラウンドデーモンを開始し、Javaプロセスの生成を待機し、Javaが常に耐えてきた低パフォーマンスのすべての幻想をクリアします

もちろん、安全のために、プロダクションでは常に完全なホットスポットが使用されます

于 2011-07-22T10:20:21.667 に答える