2013-04-19 38 views
5

jsvcを使用してLinuxアプリケーションとして実行するJavaアプリケーションを取得しようとしています。私はHow to convert a java program to daemon with jsvc?を見つけましたが、ほとんどの方法で私を得ることができましたが、私はクラスパスを理解するためにまだ苦労しています。jsvcクラスパスで複数のjarファイルを使用する

私はstderrに次のエラーを取得しています:

19/04/2013 10:43:18 12233 jsvc.exec error: Cannot find daemon loader org/apache/commons/daemon/support/DaemonLoader

19/04/2013 10:43:18 12231 jsvc.exec error: Service exit with a return value of 1

ランタイムがコモンズ-daemon.jarを見つけることができないことと思われます。

私のアプリケーションは、アプリケーション自体が単一のjarファイル内にあり、依存関係(commons-daemonを含む)がlibディレクトリにあるように構成されています。

    • daemon-script.sh
    • myapp.jarのlib /コモンズ-daemon.jar
    • のlib /その他-瓶

    ここでは私のdaemon-の関連する部分でありますscript.sh:

    LIB_DIR=$(pwd)/lib/*

    CLASS_PATH=$(pwd)/myapp.jar

    $EXEC -home $JAVA_EXEC -cp $CLASS_PATH:$LIB_DIR -outfile $LOG_OUT -errfile $LOG_ERR -pidfile $PID $1 $CLASS

    私は多くのバリエーションを試しました:相対パス、指定fically lib/commons-daemon.jar、ワイルドカードなどを参照していません。誰かがこの作業を正しく行う方法を知っていますか?

    また、myapp.jarは、(主にテスト目的のために、はい、私はまだそれがサービスとして実行する必要があります)自己実行可能なjarファイルあるので、MANIFEST.MFは、クラスパスとメーンが含まれていますクラス属性。 jsvcにマニフェストを認識させる方法はありますか?

  • 答えて

    2

    を使用してJSVCで複数のジャーを使用できます。解決策はこれにCLASS_PATH変数を変更することになる、あなたの特定の問題については

    CLASS_PATH=$(pwd)/myapp.jar:$(pwd)/lib/commons-daemon.jar:$(pwd)/lib/other-jars 
    

    また、あなたはこのようにワイルドカードを使用して、ディレクトリ内のすべてのjarファイルを含めることができます。

    CLASS_PATH=$(pwd)/myapp.jar:$(pwd)/lib/*.jar 
    

    ・ホープ、この助けてください

    +0

    私のマイレージはjsvc 1.0.8(Ubuntuで)を使って変わりました。 jsvcはワイルドカードを尊重したり、lib/dirを指定したりすることはありません。代わりに、クラスパスを明示的に "CLASS_PATH = $(echo" $ LIB_PATH "/ *。jar | tr '' ':')"を使って構築しなければなりませんでした。 私はまた、-Dlog4j.configurationを指定しようとしていました。私は通常、プロパティファイルへの絶対パスを指定するだけですが、jsvcで動作させるには、file:///という接頭辞を付けたURLとして記述する必要がありました。 私はまもなくRHELでテストします。 – ayang