2010-07-06 15 views
5

Nos gustaría enviar algunos scripts de ayuda (scripts de shell) como parte de una guerra de aplicaciones. Desafortunadamente, parece que nuestro sistema de compilación (maven) descarta los permisos en todos los archivos y los scripts terminan sin que se haya establecido el bit ejecutable.Ejecutables en un archivo de guerra

¿Es posible hacerlo? ¿El formato .war admite archivos ejecutables? En caso afirmativo: ¿cómo podría decirle a maven que guarde los permisos/los corrija en algún lugar del proceso?

+0

¿Puedo simplemente preguntar cómo estos scripts de ayuda serán utilizados (y por quién)? –

+0

por la propia aplicación :), lo sé, esta no es la forma 'JE22', pero tenemos que transferir algunos archivos de resultados a diferentes hosts usando scp y ftp. Hacer esto con un simple script de shell (que obtiene el archivo de resultados como argumento) es una obviedad. no queremos hacer esto con plain-java. – reto

Respuesta

4

El problema es más probable que estos bits no sean compatibles con el formato zip subyacente.

No es necesario establecer el bit de ejecución, si ejecuta explícitamente/bin/sh con el nombre del script.

También tenga en cuenta que su programa, que conoce la ubicación del script, puede invocar "chmod + x script.sh" antes de iniciar.

0

Suministra los ejecutables fuera de WAR. Llámalos desde la GUERRA.

+0

Esa es una solución pero trae otros problemas (el mantenimiento es el primero en venir a mi mente). No estoy seguro de que sea una buena práctica. –

+0

Solución alternativa: proporcione el ejecutable dentro de WAR, y en cada ejecución, extraiga el ejecutable programáticamente en el mismo directorio y llámelo allí. – mcandre

+0

He intentado con esta solución pero no he podido hacerlo funcionar. Por algún motivo, el cargador de clases no pudo encontrar mi recurso de script. Pasaré una hora más o menos trabajando en ello, y si falla, será una oportunidad para una nueva pregunta :) –

1

yo sepa, no hay manera de establecer permisos de archivos dentro de una guerra/frasco (esto es sin embargo posible cuando se utiliza la Asamblea Maven Plugin para crear un archivo distribución binaria de su proyecto, pero esto es otra historia).

Por lo tanto, lo haría cualquiera:

  • Deliver (como una distribución binaria) y ejecutar estos guión fuera de la webapp ~ o ~
  • leer los archivos de la ruta de clases, escribirlos en el directorio java.io.tmpdir, establece el bit de ejecución y luego ejecútalo desde allí ~ o ~
  • Usa la solución @ Thorbjørn (no lo intenté, pero creo que funcionaría); Solo me pregunto de dónde ejecutas estas secuencias de comandos.
+0

Leyendo entre líneas, la guerra se explota, por lo tanto, los scripts son archivos reales que se pueden invocar. De lo contrario, los scripts se pueden proporcionar en stdin en Unix. –

Cuestiones relacionadas