2

ここに問題があります:

MavenプラグインOne-Jarを使用して、Javaアプリケーションを単一のjarにパッケージ化しました。

ここで、JSVCを使用してアプリケーションをUnixデーモン、つまりApacheCommonsDaemonとして実行したいと思います。

私はJSVCを次のように使用しています(これは、Mavenアセンブリプラグインなどで作成されたJarで機能します)。

jsvc -user $USER -home $HOME -pidfile $PID_PATH -cp $PATH_TO_ONE_JAR my.package.MyClass

エラーは次のとおりです。

jsvc.exec error: Cannot find daemon loader org/apache/commons/daemon/support/DaemonLoader
jsvc.exec error: Service exit with a return value of 1

One-Jarはカスタムクラスローダーを使用しているので、JSVCとOne-Jarを一緒に使用することさえ可能かどうか誰かが知っていますか?java -jar my-one-jar.jarを実行すると、jarは正常に実行されます。

何ができる?

洞察をありがとう!

4

2 に答える 2

0

One-jar の代わりに(十分に文書化されていない) Maven Shade プラグインを使用すると (互いに同様の結果を達成できます)、問題が解決するはずです。依存する jar を解凍し、(jar 内に jar を入れるのではなく) ファット Jar にクラス ファイルを直接格納します。私はそれを使用して、JSVC で実行するための実行可能 jar を作成し、ある程度成功しました。

もちろん、物事が思ったほど単純なことはめったにありません。Shade プラグインを使用すると、依存関係ツリーに競合がある場合にクラスを再配置したり、 Java 以外のリソース ファイルを処理するためにリソース トランスフォーマーを使用したりする必要がある場合があります。しかし、うまくいけばそうではありません。

(もちろん、 Mkyong.com にはこれに関するガイドがあります)

于 2015-05-11T07:50:30.720 に答える
0

すべての jar 依存関係を jsvc のクラスパス オプションに追加する必要がありました。jsvc は別の jar 内の jar を使用していないようです

于 2013-03-15T19:38:53.253 に答える