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.
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 )
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>"
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.
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.
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.
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
Vérifiez les procrun manuel et ce didacticiel pour plus d'informations.
Nous utilisons le Tanuki Service Wrapper pour cela. C'est très configurable.
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