web-dev-qa-db-fra.com

Comment créer un service Windows à partir de jar Java?

J'ai un fichier JAR exécutable. Est-il possible de créer un service Windows de ce fichier JAR? En fait, je veux juste l'exécuter au démarrage, mais je ne veux pas placer ce fichier JAR dans mon dossier de démarrage, ni dans le registre.

50
Rakesh Juyal

Cet article devrait vous dire tout ce que vous devez savoir: "Exécution d'applications Java en tant que service Windows" ; il mentionne l'utilisation de " Java Service Wrapper " (il existe une édition de communauté appelée YAJSW )

14
Adrian

La solution la plus simple que j’ai trouvée jusqu’à présent est le Service Manager non-suceuse

L'utilisation serait 

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

Utilisez nssm.exe mais n'oubliez pas de définir le répertoire AppDirectory ou les bibliothèques ou ressources requises ne seront pas accessibles. Par défaut, nssm définit le répertoire de travail actuel sur celui de l'application, Java.exe, et non sur le fichier jar . Procédez ainsi pour créer un script de traitement par lots:

    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>"

Cela devrait résoudre le problème de service suspendu.

14
gcerkez

J'ai expérimenté avec Apache Commons Daemon . Il supporte windows ( Procrun ) et unix ( Jsvc ). Advanced Installer propose un didacticiel Service Java avec un exemple de projet à télécharger. Si vous exécutez javaservice.jar en tant que service Windows, vous pouvez le tester en utilisant "telnet 4444". J'ai utilisé leur exemple parce que mon objectif était de faire fonctionner un service Windows Java, et non d'écrire Java.

10
mcdon

Tanuki a changé de licence de jsw il y a quelque temps. Si je devais commencer un projet, j'utiliserais Yet Another Wrapper Service Java, http://yajsw.sourceforge.net/ qui est plus ou moins une implémentation open source imite JWS, puis s’appuie sur lui et l’améliore encore.

EDIT: J'utilise YAJSW depuis plusieurs années sur plusieurs plateformes (Windows, plusieurs linux ...) et c'est génial, le développement est en cours.

7
Persimmonium

Avec procrun, vous devez copier prunsrv dans le répertoire de l’application ( télécharger ) et créer un fichier install.bat comme celui-ci:

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%

Je présume

  • exécutez cela à partir du même répertoire où le jar et prunsrv.exe est
  • le pot a son MANIFEST.MF de travail
  • et vous avez des points d'arrêt enregistrés dans la machine virtuelle (par exemple avec context.registerShutdownHook () au printemps) ...
  • ne pas utiliser les chemins relatifs pour les fichiers en dehors du fichier jar (par exemple, log4j devrait être utilisé avec log4j.appender.X.File = $ {app.home} /logs/my.log ou quelque chose de similaire

Vérifiez les procrun manuel et ce didacticiel pour plus d'informations.

3
BTakacs

Nous utilisons le Tanuki Service Wrapper pour cela. C'est très configurable.

1
jqno

Une autre option est winsw: https://github.com/kohsuke/winsw/

Configurez un fichier XML pour spécifier le nom du service, les tâches à exécuter, les arguments, etc. Et utilisez le fichier EXE pour installer. Exemple xml: https://github.com/kohsuke/winsw/tree/master/examples

Je préfère ceci à nssm, car c’est un exe léger; et le fichier XML de configuration est facile à partager/valider pour le code source.

PS le service est installé en exécutant your-service.exe install

0
manyways