書こうとしているサービスに問題があります。Windows システムのバックグラウンドで実行されるが Java を使用するサービスを作成しようとしています。これを行ういくつかの方法を見てきましたが、私の要件を満たすと思われる方法を 1 つ決定しました。このサービスは、作業が必要な項目についてデータベースをチェックします。DB 内で必要なアイテムが見つかると、いくつかのシステム コマンドを実行してそれらを処理します。
私は tomcat7.exe ファイルを使用して jar をサービスとして実行する方法を見つけました。私が jar ファイル "myService.jar" に書き込んでコンパイルすると、それを呼び出すことができます。問題は、DB にアクセスし、BGLib-1.0.jar と呼ばれるクラスのライブラリでプリコンパイルされたコマンドを実行するために記述されたいくつかのクラスが既にあることです。
私はこのライブラリを使用していくつかの jenkins プラグインを作成しましたが、関数の呼び出しに問題はありませんでした。hpi ファイルを作成して Jenkins にデプロイすると、すべて正常に動作します。そこで、コンパイラ (Maven を使用する Eclipse) が BGLib jar をプラグイン jar と一緒にパッケージ化し、Jenkins がそれらを相互に認識させる方法を見つけ出します。
しかし、サービス jar をビルドすると、デプロイしても機能しません。
次のようなコマンドを実行して、Tomcat exe の名前を myservice.exe に変更してインストールします。
d:\myService\bin>myService.exe //IS//myService --Install=D:\myService\bin\myService.exe --Description="run some commands
Java Service" --Jvm=auto --Classpath=D:\myService\jar\myService.jar;D:\myService\jar\BGLib-1.0.jar --StartMode=jvm --
StartClass=com.myCompany.myService.myService --StartMethod=windowsService --StartParams=start --StopMode=jvm --StopClass
=com.myCompany.myService.myService --StopMethod=windowsService --StopParams=stop --LogPath=D:\myService\logs --StdOutpu
t=auto --StdError=auto
これを myService.jar 内のコードのみで展開すると、サービスは期待どおりに動作しますが、BGLib-1.0.jar 内で関数を呼び出そうとしても何も得られません。jvm がクラッシュするか、応答しなくなったように見えます。デバッグは少しトリッキーですが、クラスが見つからないというエラーが発生しているようです。
マニフェストのクラスパス エントリを変更すると役立つかどうかを確認するために、POM ファイルに以下のエントリを追加しようとしましたが、マニフェストは変更されませんでした。マニフェスト ファイルがどのように機能するかについては、私はまだ無知です。それに関するドキュメントはクールでしょう。Maven のサイトに行ったことがありますが、利用可能なタグに関する包括的なドキュメントがないようです。jar に外部クラスを表示させるために、マニフェストで変更する必要があるものはありますか? または、Maven がその jar ファイルからクラスを自分の jar ファイルにコンパイルするように追加できるものはありますか?
前もって感謝します。
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.myCompany.myService.myService</mainClass>
<customClasspathLayout>BGLib-1.0.jar</customClasspathLayout>
</manifest>
</archive>
</configuration>