Question

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.

Était-ce utile?

La solution

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 " Wrapper Service Java " (il existe une édition de communauté appelée YAJSW )

Autres conseils

La solution la plus simple que j'ai trouvée jusqu'à présent est le gestionnaire de services non-suceurs

.

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 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. Faites ceci pour créer un script batch:

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

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

Je teste le démon Apache Commons . Il prend en charge Windows ( Procrun ) et unix ( Jsvc ). Le programme d'installation avancée contient un didacticiel du 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 à l’aide de "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, http://yajsw.sourceforge.net/ , qui est plus ou moins une implémentation open source qui imite JWS, puis la construit 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éez un install.bat comme ceci:

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-le à partir du même répertoire que le fichier jar et prunsrv.exe est
  • le pot a son MANIFEST.MF en fonctionnement
  • et vous avez des crochets d'arrêt enregistrés dans la JVM (par exemple, avec context.registerShutdownHook () au printemps) ...
  • n'utilise pas les chemins relatifs pour les fichiers hors du fichier jar (par exemple, log4j doit être utilisé avec log4j.appender.X.File = $ {app.home} /logs/my.log ou quelque chose de similaire )

Consultez le processus manuel et ce tutoriel pour plus d'informations.

Nous utilisons Enveloppeur de services Tanuki 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, ce qu'il faut exécuter, tous les arguments, etc. Et utilisez l'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 avec le code source.

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

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top