Acabo de heredar una aplicación de Java que debe instalarse como un servicio en XP y Vista. Han pasado aproximadamente 8 años desde que utilicé Windows de cualquier forma y nunca tuve que crear un servicio, y mucho menos de algo como una aplicación de Java (tengo un jar para la aplicación y un solo jar de dependencia - log4j ) ¿Cuál es la magia necesaria para que esto funcione como un servicio? Tengo la fuente, por lo que es posible realizar modificaciones en el código, aunque preferiblemente evitadas.
java
windows-services
ideasculptor
fuente
fuente
Respuestas:
He tenido suerte con el Java Service Wrapper
fuente
Apache Commons Daemon es una buena alternativa. Tiene Procrun para servicios de Windows y Jsvc para demonios de Unix. Utiliza una licencia de Apache menos restrictiva, y Apache Tomcat la usa como parte de sí misma para ejecutarse en Windows y Linux. Conseguir que funcione es un poco complicado, pero hay un artículo exhaustivo con ejemplos de trabajo.
Además de eso, puede mirar el bin \ service.bat en Apache Tomcat para tener una idea de cómo configurar el servicio. En Tomcat cambian el nombre de los binarios de Procrun (prunsrv.exe -> tomcat6.exe, prunmgr.exe -> tomcat6w.exe).
Algo con lo que luché usando Procrun, sus métodos de inicio y detención deben aceptar los parámetros (String [] argv). Por ejemplo, "start (String [] argv)" y "stop (String [] argv)" funcionarían, pero "start ()" y "stop ()" causarían errores. Si no puede modificar esas llamadas, considere hacer una clase bootstrapper que pueda dar masajes a esas llamadas para satisfacer sus necesidades.
fuente
--JvmOptions=-Dopt=a#-Dopt2=b
. Estaba ejecutando el comando desde un script de hormigas y luché durante días por eso. Espero eso ayude.¡Con Apache Commons Daemon ahora puede tener un nombre e icono ejecutable personalizado! ¡También puede obtener un monitor de bandeja de Windows personalizado con su propio nombre e icono!
¡Ahora tengo mi servicio ejecutándose con mi propio nombre e icono (prunsrv.exe), y el monitor de la bandeja del sistema (prunmgr.exe) también tiene mi propio nombre e icono personalizados!
MyServiceName.exe
yMyServiceNamew.exe
respectivamente.Descargue WinRun4J y use el
RCEDIT.exe
programa que viene con él para modificar el ejecutable de Apache para incrustar su propio icono personalizado como este:Ahora instale su servicio de Windows de esta manera (consulte la documentación para obtener más detalles y opciones):
¡Ahora tiene un servicio de Windows de su Jar que se ejecutará con su propio icono y nombre! También puede iniciar el archivo del monitor y se ejecutará en la bandeja del sistema con su propio icono y nombre.
fuente
Una manera simple es el NSSM Wrapper Wrapper ( ver mi entrada de blog ).
fuente
Una opción más es WinRun4J . Este es un lanzador de Java configurable que también funciona como host de servicio de Windows (versiones de 32 y 64 bits). Es de código abierto y no hay restricciones para su uso.
(divulgación completa: trabajo en este proyecto).
fuente
Otra respuesta es Yet Another Java Service Wrapper , esta parece una buena alternativa a Java Service Wrapper, ya que tiene mejores licencias. También se pretende que sea fácil pasar de JSW a YAJSW. Ciertamente para mí, completamente nuevo para los servidores de Windows e intentando que una aplicación Java se ejecutara como un servicio, fue muy fácil de usar.
Algunos otros que encontré, pero no terminé usando:
fuente
Creo que Java Service Wrapper funciona bien. Tenga en cuenta que hay tres formas de integrar su aplicación. Parece que la opción 1 funcionará mejor para usted dado que no desea cambiar el código. El archivo de configuración puede volverse un poco loco, pero solo recuerde que (para la opción 1) el programa que está iniciando y para el cual especificará argumentos, es su programa auxiliar, que luego iniciará su programa. Tienen un archivo de configuración de ejemplo para esto.
fuente
Si utiliza Gradle Build Tool, puede probar mi complemento de servicio de Windows , que facilita el uso de Apache Commons Daemon Procrun .
Para crear una aplicación de servicio de Windows Java con el complemento, debe seguir varios pasos simples.
Cree una clase de servicio principal con el método apropiado.
Incluya el complemento en su
build.gradle
archivo.El mismo fragmento de script para el nuevo mecanismo de plugin incubación introducido en Gradle 2.1:
Configura el complemento.
Ejecute la tarea gradle createWindowsService para crear una distribución de servicios de Windows.
Eso es todo lo que necesita hacer para crear un servicio simple de Windows. El complemento descargará automáticamente los archivos binarios Apache Commons Daemon Procrun, extraerá estos archivos binarios en el directorio de distribución del servicio y creará archivos por lotes para la instalación / desinstalación del servicio.
En el
${project.buildDir}/windows-service
directorio encontrará ejecutables del servicio, scripts por lotes para la instalación / desinstalación del servicio y todas las bibliotecas de tiempo de ejecución. Para instalar el servicio, ejecute<project-name>-install.bat
y si desea desinstalarlo, ejecute el servicio<project-name>-uninstall.bat
. Para iniciar y detener el servicio, use el<project-name>w.exe
ejecutable.Tenga en cuenta que el inicio del servicio de manejo de métodos debe crear e iniciar un subproceso separado para llevar a cabo el procesamiento, y luego regresar. El método principal se llama desde diferentes subprocesos cuando inicia y detiene el servicio.
Para obtener más información, lea sobre el complemento y Apache Commons Daemon Procrun.
fuente
JavaService es LGPL. Es muy fácil y estable. Muy recomendable.
fuente
Con Java 8 podemos manejar este escenario sin ninguna herramienta externa. La herramienta javapackager que viene con java 8 proporciona una opción para crear paquetes de aplicaciones independientes:
-native type Genera paquetes de aplicaciones autónomas (si es posible). Use la opción -B para proporcionar argumentos a los paquetes que se utilizan. Si se especifica el tipo, solo se crea un paquete de este tipo. Si no se especifica ningún tipo, se usa todo.
Los siguientes valores son válidos para el tipo:
En el caso de que Windows consulte el siguiente documento , podemos crear msi o exe según sea necesario.
fuente
Una comparación bastante buena de diferentes soluciones está disponible en: http://yajsw.sourceforge.net/#mozTocId284533
Personalmente como launch4j
fuente
es simple ya que tienes que poner acceso directo en
Windows 7
C:\users\All Users\Start Menu\Programs\Startup
(administrador) oUser home directory(%userProfile%)
Windows 10: en ejecución
shell:startup
en su propiedad -> acceso directo -> destino ->
java.exe -jar D:\..\runJar.jar
NOTA: Esto se ejecutará solo después de iniciar sesión
Con derecho de administrador
sc create serviceName binpath= "java.exe -jar D:\..\runJar.jar"
Creará el servicio de Windowssi le da tiempo de espera de su uso
cmd /c D:\JAVA7~1\jdk1.7.0_51\bin\java.exe -jar d:\jenkins\jenkins.war
, pero incluso con este obtendrá se iniciarán tiempo de espera, pero en el fondo java.exe. Registrarse en el administrador de tareasNOTA: Esto se ejecutará al inicio del inicio de sesión de Windows (antes del inicio de sesión, según el servicio '
Startup Type
')Explicación detallada de la creación del servicio de Windows.
fuente
Utilice " winsw ", que fue escrito para Glassfish v3 pero funciona bien con los programas Java en general.
Requiere .NET runtime instalado.
fuente
He usado JavaService antes con buen éxito. No se ha actualizado en un par de años, pero era bastante sólido cuando lo usé.
fuente
No me gustó la licencia del Java Service Wrapper. Fui con ActiveState Perl para escribir un servicio que hace el trabajo.
Pensé en escribir un servicio en C #, pero mis limitaciones de tiempo eran demasiado estrictas.
fuente
Siempre uso sc.exe (consulte http://support.microsoft.com/kb/251192 ). Debe instalarse en XP desde SP1, y si no tiene el sabor de Vista, puede descargarlo con el kit de recursos de Vista.
No he hecho nada demasiado complicado con Java, pero usar un argumento de línea de comando totalmente calificado (x: \ java.exe ...) o crear un script con Ant para incluir dependencias y establecer parámetros funciona bien para mí.
fuente
Otra buena opción es FireDaemon . Lo utilizan algunas grandes tiendas como la NASA, IBM, etc. ver su sitio web para obtener una lista completa.
fuente
Actualmente estoy requiriendo que esto ejecute una aplicación basada en Eclipse, pero primero necesito establecer algunas variables que sean locales para esa aplicación. sc.exe solo permitirá archivos ejecutables pero no scripts, así que recurrí a autoexnt.exe, que es parte del kit de recursos de Windows 2003 . Restringe el servicio a un solo archivo por lotes, pero solo necesito un script por lotes para convertirlo en un servicio.
chao!
fuente
Exe4j es una muy buena opción, aunque no es gratuita. Compruébalo en Exe4j En el asistente para crear el archivo .exe, tiene la opción de crear un servicio.
fuente