Ok, creo que el siguiente podría hacer lo que necesita. El inconveniente de este enfoque es que habrá un intervalo entre cada despliegue a medida que se ejecuta la compilació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 construirá 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 include element
en consecuencia.
Tenga en cuenta que los parámetros para la tarea FTP se han establecido como propiedades, esto permite que se anulen desde la línea de comandos y/o se hereden del POM principal.
<profiles>
<profile>
<id>publish</id>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>ftp</id>
<phase>install</phase>
<configuration>
<tasks>
<ftp action="send"
server="${ftp.host}" remotedir="${ftp.remotedir}"
userid="${ftp.userid}" password="${ftp.password}"
depends="${ftp.depends}" verbose="${ftp.verbose}">
<fileset dir="${project.build.directory}">
<include
name="${project.build.finalName}.${project.packaging}"/>
</fileset>
</ftp>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>ant</groupId>
<artifactId>ant-commons-net</artifactId>
<version>1.6.5</version>
</dependency>
<dependency>
<groupId>ant</groupId>
<artifactId>ant-nodeps</artifactId>
<version>1.6.5</version>
</dependency>
</dependencies>
</plugin>
<properties>
<ftp.host>hostname</ftp.host>
<ftp.remotedir>/opt/path/to/install</ftp.remotedir>
<ftp.userid>user</ftp.userid>
<ftp.password>mypassword</ftp.password>
<ftp.depends>yes</ftp.depends>
<ftp.verbose>no</ftp.verbose>
</properties>
</profile>
</profiles>
Actualización: basado en su comentario: Se puede usar el plugin de dependencia para descargar cada dependencia, excepto que un padre no puede tener una dependencia de un niño, y que se construirá antes de que el niño . 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 objetivo 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
.
<profiles>
<profile>
<id>deploy-artifact1</id>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependency</id>
<phase>prepare-package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>name.seller.rich</groupId>
<artifactId>artifact1</artifactId>
<version>1.0.0</version>
<type>jar</type>
<overWrite>false</overWrite>
</artifactItem>
</artifactItems>
<outputDirectory>${project.build.directory}/deploy-staging</outputDirectory>
<overWriteReleases>false</overWriteReleases>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>ftp</id>
<phase>install</phase>
<configuration>
<tasks>
<ftp action="send"
server="${ftp.host}" remotedir="${ftp.remotedir}"
userid="${ftp.userid}" password="${ftp.password}"
depends="${ftp.depends}" verbose="${ftp.verbose}">
<fileset dir="${project.build.directory} includes="deploy-staging/"/>
</ftp>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
<properties>
<!--if the properties differ between targets, qualify them with the artifact name-->
<ftp.host>hostname</ftp.host>
<ftp.remotedir>/opt/path/to/install</ftp.remotedir>
<ftp.userid>user</ftp.userid>
<ftp.password>mypassword</ftp.password>
<ftp.depends>yes</ftp.depends>
<ftp.verbose>no</ftp.verbose>
</properties>
</profile>
</profiles>
Ja ja. Ojalá estuviera "atascado" con Maven en mi compañía. – SingleShot
No lo quise decir de manera despectiva :) – Bostone
No entiendo qué significa "Destino en el nivel de subproyecto" significa. ¿Entregan todos los archivos a cada destino? –