run jdk create java linux maven-2 maven-plugin daemon

java - create - jdk 11



Herramienta para crear un servicio de daemon de Java en Linux (3)

¿Cuál es la mejor manera de crear una aplicación java que se pueda ejecutar usando ''servicio'' en Linux? Iba a usar el JSW disponible here , pero no puedo usar la licencia en eso (la licencia es GPL o cuesta dinero por lo que puedo decir). Necesitaría una licencia de estilo apache.

Estoy utilizando maven para compilar, por lo que sería genial si fuera posible crear el servicio utilizando un complemento de maven, pero cualquier otra sugerencia sería excelente.

He visto Apache Commons Daemon , ¿hay un plugin de maven para esto? La documentación parece escasa, por lo que un ejemplo práctico de esto sería bueno ...

Gracias


Por lo que sé, no hay un complemento de Maven para Apache Daemon o Akuma . Aunque podría intentar invocarlos desde una compilación de Maven usando el maven-exec-plugin .

En cuanto a las reservas de su empresa sobre el uso de productos con licencia GPL, vale la pena leer sobre las implicaciones del uso. No es tan virulento como temen las corporaciones. Aquí hay una interpretación de la GPL . Por supuesto, no tiene ningún peso en la ley (y puede que no sea correcto o esté respaldado por un precedente, no soy abogado), pero podría ser suficiente para permitirle iniciar una conversación con sus personas jurídicas.

Desde la página referenciada:

La simple combinación de un trabajo con derechos de autor con otro trabajo no crea un trabajo derivado. El trabajo original con derechos de autor debe ser modificado de alguna manera. El trabajo derivado resultante debe en sí mismo "representar un trabajo original de autoría". Entonces, si el titular de la licencia no modifica el programa original con licencia GPL, sino que simplemente lo ejecuta, no está creando un trabajo derivado.

Existe el complemento Appassembler Maven que creo que hace lo que necesitas (aunque crea envoltorios JSW). Crea un script de shell (y un archivo bat) y recopila todos los archivos jar de la aplicación en un directorio. Opcionalmente, puede configured para crear configuraciones Daemon basadas en JSW.

Aquí hay una configuración de ejemplo que generará la aplicación independiente en la carpeta target / appassembler, y generará los archivos de envoltura JSW en el directorio target / appassembler / jsw / myApp. Tenga en cuenta que el objetivo de ensamblaje está vinculado a la fase de prueba de integración para garantizar que se crea el contenedor del proyecto. Para generar el resultado, ejecute mvn verificar o simplemente genere las envolturas del servicio, ejecute el paquete mvn :

<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>appassembler-maven-plugin</artifactId> <version>1.0</version> <executions> <execution> <id>assemble-standalone</id> <phase>integration-test</phase> <goals> <goal>assemble</goal> </goals> <configuration> <programs> <program> <mainClass>name.seller.rich.MyMainClass</mainClass> <name>myShellScript</name> </program> </programs> <platforms> <platform>windows</platform> <platform>unix</platform> </platforms> <!--collect all jars into the lib directory--> <repositoryLayout>flat</repositoryLayout> <repositoryName>lib</repositoryName> </configuration> </execution> <execution> <id>generate-jsw-scripts</id> <phase>package</phase> <goals> <goal>generate-daemons</goal> </goals> <configuration> <!--declare the JSW config --> <daemons> <daemon> <id>myApp</id> <mainClass>name.seller.rich.MyMainClass</mainClass> <commandLineArguments> <commandLineArgument>start</commandLineArgument> </commandLineArguments> <platforms> <platform>jsw</platform> </platforms> </daemon> </daemons> <target>${project.build.directory}/appassembler</target> </configuration> </execution> </executions> </plugin>

Para referencia los archivos generados son los siguientes:

myApp/bin/myApp myApp/bin/myApp.bat myApp/bin/wrapper-linux-x86-32 myApp/bin/wrapper-macosx-universal-32 myApp/bin/wrapper-solaris-x86-32 myApp/bin/wrapper-windows-x86-32.exe myApp/conf/wrapper.conf myApp/lib/libwrapper-linux-x86-32.so myApp/lib/libwrapper-macosx-universal-32.jnilib myApp/lib/libwrapper-solaris-x86-32.so myApp/lib/wrapper-windows-x86-32.dll myApp/lib/wrapper.jar



Los servicios en Linux son solo scripts de shell que inician procesos en segundo plano. Eche un vistazo en /etc/init.d - puede abrir los archivos en un editor de texto. Todo lo que necesita es un script de bash que responda a los parámetros start y stop de una manera adecuada (por ejemplo, start iniciará su servicio y registrará la identificación del proceso en una ubicación conocida, la stop detendrá el proceso con el PID del archivo que creó) ), y luego colocarlo en /etc/init.d .

Eche un vistazo a los scripts de inicio y una introducción a los servicios, los niveles de ejecución y los scripts rc.d