Je viens d'hériter d'une application java qui doit être installée en tant que service sur XP et Vista. Cela fait environ 8 ans que je n'ai utilisé Windows sous aucune forme et je n'ai jamais eu à créer un service, encore moins à partir de quelque chose comme une application java (j'ai un pot pour l'application et un pot de dépendance unique - log4j ). Quelle est la magie nécessaire pour faire de cette course un service? J'ai la source, donc les modifications de code, bien que de préférence évitées, sont possibles.
java
windows-services
idéesculpteur
la source
la source
Réponses:
J'ai eu de la chance avec le Java Service Wrapper
la source
Apache Commons Daemon est une bonne alternative. Il a Procrun pour les services Windows et Jsvc pour les démons Unix. Il utilise une licence Apache moins restrictive et Apache Tomcat l'utilise comme une partie de lui-même pour fonctionner sur Windows et Linux! Pour le faire fonctionner est un peu délicat, mais il existe un article exhaustif avec un exemple de travail.
En plus de cela, vous pouvez consulter le bin \ service.bat dans Apache Tomcat pour avoir une idée de la configuration du service. Dans Tomcat, ils renomment les binaires Procrun (prunsrv.exe -> tomcat6.exe, prunmgr.exe -> tomcat6w.exe).
Quelque chose que j'ai eu du mal à utiliser Procrun, vos méthodes de démarrage et d'arrêt doivent accepter les paramètres (String [] argv). Par exemple, "start (String [] argv)" et "stop (String [] argv)" fonctionneraient, mais "start ()" et "stop ()" provoqueraient des erreurs. Si vous ne pouvez pas modifier ces appels, envisagez de créer une classe d'amorçage capable de masser ces appels en fonction de vos besoins.
la source
--JvmOptions=-Dopt=a#-Dopt2=b
. J'exécutais la commande à partir d'un script de fourmi et luttais pendant des jours à cause de cela. J'espère que ça aide.Avec Apache Commons Daemon, vous pouvez maintenant avoir un nom et une icône exécutables personnalisés! Vous pouvez également obtenir un moniteur de plateau Windows personnalisé avec votre propre nom et icône!
J'ai maintenant mon service fonctionnant avec mon propre nom et icône (prunsrv.exe), et le moniteur de la barre d'état système (prunmgr.exe) a également mon propre nom et icône personnalisés!
MyServiceName.exe
etMyServiceNamew.exe
respectivement.Téléchargez WinRun4J et utilisez le
RCEDIT.exe
programme qui l'accompagne pour modifier l'exécutable Apache afin d'incorporer votre propre icône personnalisée comme ceci:Installez maintenant votre service Windows comme ceci (voir la documentation pour plus de détails et d'options):
Maintenant, vous avez un service Windows de votre Jar qui fonctionnera avec votre propre icône et nom! Vous pouvez également lancer le fichier moniteur et il s'exécutera dans la barre d'état système avec votre propre icône et nom.
la source
Un moyen simple est le Wrapper Wrapper NSSM ( voir mon entrée de blog ).
la source
Une autre option est WinRun4J . Il s'agit d'un lanceur java configurable qui se double d'un hôte de service Windows (versions 32 et 64 bits). Il est open source et il n'y a aucune restriction quant à son utilisation.
(divulgation complète: je travaille sur ce projet).
la source
Pourtant, une autre réponse est encore un autre Java Service Wrapper , cela semble être une bonne alternative à Java Service Wrapper car il a de meilleures licences. Il est également prévu de passer facilement de JSW à YAJSW. Certainement pour moi, tout nouveau sur les serveurs Windows et essayant de faire fonctionner une application Java en tant que service, c'était très facile à utiliser.
J'en ai trouvé d'autres, mais je n'ai pas fini par utiliser:
la source
Je pense que Java Service Wrapper fonctionne bien. Notez qu'il existe trois façons d'intégrer votre application. Il semble que l'option 1 fonctionnera mieux pour vous étant donné que vous ne voulez pas modifier le code. Le fichier de configuration peut devenir un peu fou, mais n'oubliez pas que (pour l'option 1) le programme que vous démarrez et pour lequel vous spécifiez des arguments, est leur programme d'aide, qui démarrera ensuite votre programme. Ils ont un exemple de fichier de configuration pour cela.
la source
Si vous utilisez Gradle Build Tool, vous pouvez essayer mon plugin windows-service , qui facilite l'utilisation d' Apache Commons Daemon Procrun .
Pour créer une application de service java windows avec le plugin, vous devez suivre plusieurs étapes simples.
Créez une classe de service principale avec la méthode appropriée.
Incluez le plugin dans votre
build.gradle
fichier.Le même extrait de script pour le nouveau mécanisme de plug-in en incubation introduit dans Gradle 2.1:
Configurez le plugin.
Exécutez createWindowsService tâche createWindowsService pour créer une distribution de service Windows.
C'est tout ce que vous devez faire pour créer un service Windows simple. Le plugin télécharge automatiquement les binaires Apache Commons Daemon Procrun, extrait ces binaires dans le répertoire de distribution du service et crée des fichiers de commandes pour l'installation / la désinstallation du service.
Dans le
${project.buildDir}/windows-service
répertoire, vous trouverez les exécutables du service, les scripts de commandes pour l'installation / la désinstallation du service et toutes les bibliothèques d'exécution. Pour installer l'exécution de service<project-name>-install.bat
et si vous souhaitez désinstaller l'exécution de service<project-name>-uninstall.bat
. Pour démarrer et arrêter le service, utilisez l'<project-name>w.exe
exécutable.Notez que la méthode de gestion du démarrage du service doit créer et démarrer un thread distinct pour effectuer le traitement, puis revenir. La méthode principale est appelée à partir de différents threads lorsque vous démarrez et arrêtez le service.
Pour plus d'informations, veuillez lire le plugin et Apache Commons Daemon Procrun.
la source
JavaService est LGPL. C'est très simple et stable. Hautement recommandé.
la source
Avec Java 8, nous pouvons gérer ce scénario sans aucun outil externe. L' outil javapackager fourni avec Java 8 fournit une option pour créer des ensembles d'applications autonomes:
-native type Génère des bundles d'applications autonomes (si possible). Utilisez l'option -B pour fournir des arguments aux regroupeurs utilisés. Si le type est spécifié, seul un ensemble de ce type est créé. Si aucun type n'est spécifié, tout est utilisé.
Les valeurs suivantes sont valides pour le type:
Dans le cas de fenêtres, reportez-vous au document suivant, nous pouvons créer msi ou exe au besoin.
la source
Une assez bonne comparaison des différentes solutions est disponible sur: http://yajsw.sourceforge.net/#mozTocId284533
Personnellement, comme launch4j
la source
c'est simple car il faut mettre un raccourci
Windows 7
C:\users\All Users\Start Menu\Programs\Startup
(Admin) ouUser home directory(%userProfile%)
Windows 10: en cours d'exécution
shell:startup
dans sa propriété -> raccourci -> cible ->
java.exe -jar D:\..\runJar.jar
REMARQUE: cela ne fonctionnera qu'après votre connexion
Avec droit d'administrateur
sc create serviceName binpath= "java.exe -jar D:\..\runJar.jar"
Va créer un service Windowssi vous obtenez délai l' utilisation ,
cmd /c D:\JAVA7~1\jdk1.7.0_51\bin\java.exe -jar d:\jenkins\jenkins.war
mais même avec cela , vous obtiendrez délai d' attente mais dans java.exe d'arrière - plan seront mis en chantier. Archiver le gestionnaire de tâchesREMARQUE: cela s'exécutera au démarrage de l'ouverture de session Windows (avant la connexion, en fonction du service '
Startup Type
')Explication détaillée de la création d'un service Windows
la source
Utilisez " winsw " qui a été écrit pour Glassfish v3 mais fonctionne bien avec les programmes Java en général.
Exécuter le runtime .NET installé.
la source
J'ai déjà utilisé JavaService avec succès. Il n'a pas été mis à jour depuis quelques années, mais il était assez solide lorsque je l'ai utilisé.
la source
Je n'aimais pas la licence pour Java Service Wrapper. Je suis allé avec ActiveState Perl pour écrire un service qui fait le travail.
J'ai pensé à écrire un service en C #, mais mes contraintes de temps étaient trop serrées.
la source
J'utilise toujours sc.exe (voir http://support.microsoft.com/kb/251192 ). Il doit être installé sur XP à partir du SP1, et si ce n'est pas dans votre version de Vista, vous pouvez le télécharger et le charger avec le kit de ressources Vista.
Je n'ai rien fait de trop compliqué avec Java, mais l'utilisation d'un argument de ligne de commande complet (x: \ java.exe ....) ou la création d'un script avec Ant pour inclure les dépendances et définir les paramètres me convient parfaitement.
la source
FireDaemon est une autre bonne option . Il est utilisé par certains grands magasins comme la NASA, IBM, etc. consultez leur site Web pour une liste complète.
la source
J'exige actuellement cela pour exécuter une application basée sur Eclipse, mais je dois d'abord définir certaines variables locales à cette application. sc.exe n'autorisera que les exécutables mais pas les scripts, je me suis donc tourné vers autoexnt.exe qui fait partie du kit de ressources Windows 2003 . Il limite le service à un seul fichier de commandes mais je n'ai besoin que d'un seul script de commandes pour être converti en service.
ciao!
la source
Exe4j est une très bonne option bien qu'elle ne soit pas gratuite. Vérifiez-le sur Exe4j Dans l'assistant pour créer le fichier .exe, vous avez la possibilité de créer un service.
la source