A continuación se expondrán tres grandes secciones de como hacer esto:
- La definición de que archivos copiar y excluir
- La configuración del plugin Maven Resources
- La definición de profiles
La definición de que archivos copiar y excluir
La escencia básicamente es copiar unos determinados recursos y excluir otros; y la forma de indicar esto es utilizando el tag resources dentro del tag build, donde en la invocación se utilice una propiedad que indique que recursos incluir.
<build> ... <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**.*</include> <include>custom/${deploy.target.folder}/**.*</include> </includes> <excludes> <exclude>custom/**.*</exclude> </excludes> </resource> </resources> ...En el snippet anterior, por defecto se excluyen todos los ficheros dentro del directorio src/main/resources/custom, pero se incluyen todos los ficheros de la carpeta src/main/resources y src/main/resources/custom/${deploy.target.folder}, donde la propiedad deploy.target.folder indica la subcarpeta, de cuyo contenido si que hay que incluir; los posibles valores para esta propiedad se informarán desde los perfiles maven creados para cada entorno destino.
La configuración del plugin Maven Resources
Ahora queda controlar la copia de los recursos del proyecto al directorio destino de la generación del ejecutable; para ello disponemos del goal resources:copy-resources perteneciente al plugin Maven Resources.
<build> ... ...resources... ... <plugins> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>2.4.3</version> <executions> <execution> <id>copy-resources</id> <phase>validate</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/${project.build.finalName}/images</outputDirectory> <resources> <resource> <directory>src/main/resources/custom/${deploy.target.folder}/images</directory> </resource> </resources> </configuration> </execution> </executions> </plugin> </plugins>
La definición de profiles
Ahora solo queda definir los perfiles, uno para cada entorno de despliegue.
... <profiles> <profile> <id>integracion</id> <properties> <deploy.target.folder>int</deploy.target.folder> </properties> </profile> <profile> <id>pre-produccion</id> <properties> <deploy.target.folder>pre</deploy.target.folder> </properties> </profile> <profile> <id>produccion</id> <properties> <deploy.target.folder>pro</deploy.target.folder> </properties> </profile> </profiles> ...
No esta demás decir que en nuestro proyecto tendremos que disponer de los directorios:
- src/main/resources/custom/int
- src/main/resources/custom/pre
- src/main/resources/custom/pro
Y que en cada uno de estos directorios existen los mismos recursos ;-).
Bueno este artículo a sido fruto de la colaboración de Jordi Carbonell.
Enlaces relacionados:
- Desplegando con diferentes ficheros de configuración
- Introduction to the POM
- Introduction to the Build Lifecycle
- Including and excluding files and directories
- Maven Resources Plugin
- FIN -
No comments:
Post a Comment