web-dev-qa-db-ja.com

Java jarからWindowsサービスを作成する方法?

実行可能なJARファイルがあります。そのJARのWindowsサービスを作成することは可能ですか?実際には、起動時に実行したいだけですが、そのJARファイルをスタートアップフォルダーに配置したくはありません。レジストリにも配置したくありません。

53
Rakesh Juyal

この記事では、知っておく必要があることすべてを説明する必要があります。 "Running Java Windowsサービスとしてのアプリケーション" ;「 Java Service Wrapper = "( [〜#〜] yajsw [〜#〜] というコミュニティエディションがあります)

16
Adrian

私がこれまでに見つけた最も簡単な解決策は、 Non-Sucking Service Manager です

使用法は

nssm install <servicename> "C:\Program Files\Java\jre7\Java.exe" "-jar <path-to-jar-file>"
46
kopernik

Nssm.exeを使用しますが、AppDirectoryを設定することを忘れないでください。そうしないと、必要なライブラリまたはリソースにアクセスできなくなります。デフォルトでは、nssmは、現在の作業ディレクトリを、jarではなくアプリケーションのJava.exeの作業ディレクトリに設定します。バッチスクリプトを作成するには、次のようにします。

    pushd <path-to-jar>
    nssm.exe install "<service-name>" "<path-to-Java.exe>" "-jar <name-of-jar>"
    nssm.exe set "<service-name>" AppDirectory "<path-to-jar>"

これにより、サービスの一時停止の問題が修正されます。

17
gcerkez

Tanukiはjswのライセンスを少し前に変更しました。プロジェクトを開始する場合、Yet Another Java Service Wrapper、 http:// yajsw。 sourceforge.net/ これは多かれ少なかれ、JWSを模倣したオープンソース実装であり、JWSに基づいて構築され、さらに改善されます。

編集:私は数年前からYAJSWを複数のプラッター(Windows、複数のLinux ...)で使用してきましたが、素晴らしいことであり、開発が進行中です。

7
Persimmonium

Procrunでは、prunsrvをアプリケーションディレクトリにコピーし( download )、次のようにinstall.batを作成する必要があります。

set PR_PATH=%CD%
SET PR_SERVICE_NAME=MyService
SET PR_JAR=MyService.jar
SET START_CLASS=org.my.Main
SET START_METHOD=main
SET STOP_CLASS=Java.lang.System
SET STOP_METHOD=exit
rem ; separated values
SET STOP_PARAMS=0
rem ; separated values
SET JVM_OPTIONS=-Dapp.home=%PR_PATH%
prunsrv.exe //IS//%PR_SERVICE_NAME% --Install="%PR_PATH%\prunsrv.exe" --Jvm=auto --Startup=auto --StartMode=jvm --StartClass=%START_CLASS% --StartMethod=%START_METHOD% --StopMode=jvm --StopClass=%STOP_CLASS% --StopMethod=%STOP_METHOD% ++StopParams=%STOP_PARAMS% --Classpath="%PR_PATH%\%PR_JAR%" --DisplayName="%PR_SERVICE_NAME%" ++JvmOptions=%JVM_OPTIONS%

私は推測します

  • jarおよびprunsrv.exeがある同じディレクトリからこれを実行します
  • jarにはMANIFEST.MFが機能しています
  • そして、あなたはJVMに登録されたシャットダウンフックを持っています(たとえばSpringのcontext.registerShutdownHook()で)...
  • jar外のファイルに相対パスを使用しない(たとえば、log4jはlog4j.appender.X.File = $ {app.home} /logs/my.logまたは何か)

詳細については、procrun manual および このチュートリアル を確認してください。

3
BTakacs

そのために Tanuki Service Wrapper を使用します。それは非常に設定可能です。

1
jqno

別のオプションはwinswです: https://github.com/kohsuke/winsw/

Xmlファイルを構成して、サービス名、実行するもの、引数などを指定し、exeを使用してインストールします。 xmlの例: https://github.com/kohsuke/winsw/tree/master/examples

これはnssmよりも好きです。なぜなら、それは1つの軽量のexeであるためです。 config xmlはソースコードへの共有/コミットが簡単です。

PSサービスはyour-service.exe installを実行してインストールされます

0
manyways