Usando Maven para el despliegue

Tengo esta tarea para el proyecto con 4 subproyectos nesteds utilizando Maven:

  1. Para cada niño: directorio de recursos jar-up incluyendo dependencias de proyecto
  2. Avanzar al proyecto principal
  3. Con un solo comando, extraiga todos los archivos creados en varios destinos remotos (instalación completa), que pueden incluir servidor http, servidor de aplicaciones, servidor de archivos, etc. (principalmente * NIX). El destino se proporciona en el nivel del subproyecto
  4. También debería ser posible descomprimir / copiar del subproyecto individual (instalación parcial)

Los archivos no son Java, en su mayoría varios scripts y HTML

Estoy mirando los diversos complementos para ayudar con la tarea: ensamblaje, dependencia, antrun, descomprimir. La dependencia parece prometedora, pero necesito descomprimir no solo los contenedores de dependencia, sino también el contenido del (sub) proyecto. Además, dado que no puedo realmente ajustar la operación al ciclo de vida de Maven, ¿cómo activaría la instalación remota? dependencia mvn: descomprimir? Eso no es muy descriptivo o intuitivo. ¿Es posible crear un objective personalizado (por ejemplo, proyecto: instalar) sin escribir un complemento?

Usar Maven es el estándar de la compañía, así que por favor no ofrezcas alternativas. Estoy bastante atrapado con lo que tengo

Ok, creo que lo siguiente podría hacer lo que necesites. El inconveniente de este enfoque es que habrá un intervalo entre cada despliegue a medida que se ejecuta la comstackción subsiguiente. ¿Es esto aceptable?

Defina un perfil en cada proyecto con el mismo nombre (digamos “publicar”). Dentro de ese perfil, puede definir una configuración para usar el antrun-plugin para entregar los archivos con FTP (ver a continuación).

En el proyecto principal, tendrá un elemento de módulos, definiendo cada proyecto como un módulo. Si ejecuta mvn install -P publish , cada proyecto se mvn install -P publish a su vez con el perfil de publicación habilitado y el artefacto final publicado en el destino durante la fase de instalación. Si necesita implementar archivos adicionales, modifique el element inclusión en consecuencia.

Tenga en cuenta que los parámetros para la tarea FTP se han establecido como propiedades, esto les permite ser anulados desde la línea de comandos y / o heredados del POM padre.

   publish  org.apache.maven.plugins maven-antrun-plugin   ftp install           run      commons-net commons-net 1.4.1   ant ant-commons-net 1.6.5   ant ant-nodeps 1.6.5     hostname /opt/path/to/install user mypassword yes no    

Actualización: basado en su comentario: puede usar el complemento de dependencia para descargar cada dependencia, excepto que un padre no puede tener una dependencia en un elemento secundario, y se comstackrá antes que el elemento secundario. Tendría que ser otro proyecto. también necesita tener en algún lugar la información de dónde desplegarlos. Por el momento, tiene la información del objective en los proyectos individuales, por lo que no está accesible en el proyecto del implementador.

Tomando este enfoque, puede definir múltiples perfiles en el nuevo proyecto, uno para cada artefacto. Cada perfil define una dependencia: copia de ejecución para obtener el jar y una ejecución antrun para uno de los proyectos. La configuración común (como las dependencias para el plugin antrun) puede extraerse de los perfiles. También tenga en cuenta que las propiedades se fusionarán si define múltiples perfiles, por lo que es posible que necesite calificarlos con el nombre del artefacto, por ejemplo, ftp.artifact1.host .

   deploy-artifact1  org.apache.maven.plugins maven-dependency-plugin   copy-dependency prepare-package  copy     name.seller.rich artifact1 1.0.0 jar false   ${project.build.directory}/deploy-staging false      org.apache.maven.plugins maven-antrun-plugin   ftp install         run       hostname /opt/path/to/install user mypassword yes no    

Debajo de POM ayudará a copiar el archivo jar desde el directorio de construcción del proyecto al servidor remoto SFTP / FTP.

  1. Use el comando mvn install -Dftp.password = contraseña

Como quiero pasar la contraseña del símbolo del sistema por razones de seguridad, he usado -Dftp.password = password. Después de la ejecución del comando anterior, todos los archivos jar de la carpeta de destino del proyecto maven se implementarán en la carpeta MAVEN en server.com

   org.apache.maven.plugins maven-antrun-plugin   ftp install           run      org.apache.ant ant-jsch 1.9.4    

No funciona sin frase de contraseña.

   publish    maven-antrun-plugin   scp deploy           run      org.apache.ant ant-jsch 1.9.4       

Sin embargo, mi favorito es

   upload-devel    maven-antrun-plugin   upload-devel deploy           run        

aunque no sé cuán compatible es con las diferentes plataformas.

Me gustaría utilizar el complemento maven-assembly para hacer esto.

Algo como esto se puede usar para tomar los archivos de los proyectos secundarios y rellenarlos en los directorios de salida.

  xyzzy  zip    ../subproject1/target/ /foo  *.jar    ../subproject1/target/html-output/ /foo  *.html *.js *.css    ../subproject2/target/ /bar  **/**   **/*.exclude-this     

Maven no está diseñado para implementar tarros en una ubicación remota; su uso principal es comstackr y empacar artefactos. Los objectives de ensamblaje y dependencia se usan principalmente para reunir dependencias y archivos para empaquetar en un artefacto.

Una vez dicho esto, maven tiene un objective de despliegue que usa un componente llamado vagón. Esto está destinado principalmente a implementarse en un repository maven. Hay un complemento llamado Cargo que se puede usar para implementar artefactos en un servidor remoto, pero que no explota el contenido del contenedor por sí mismo (depende de que el servidor de aplicaciones de destino haga todo eso). Es posible que pueda extender la funcionalidad de Maven Wagon usted mismo.

Además, es posible empaquetar un ciclo de vida personalizado, pero eso se está metiendo en algún maven mojo de nivel bastante bajo (juego de palabras intencionado).