2.1 complemento de recursos de copia maven-resources-plugin
Si está creando una aplicación web, solo tendrá un montón de recursos diferentes en ella. Estas son bibliotecas jar, servlets jsp, archivos de configuración. Y, por supuesto, este es un montón de archivos estáticos como html
, css
, js
, así como varias imágenes.
De forma predeterminada, al crear un proyecto, Maven simplemente copiará todos sus archivos de la carpeta src/main/resources
al directorio de destino. Si desea realizar cambios en este comportamiento, el complemento lo ayudará maven-resources-plugin
.
Código de muestra para dicho complemento:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>
${basedir}/target/resources
</outputDirectory>
<resources>
<resource> instructions for copying a resource 1 </resource>
<resource> instructions for copying a resource 2 </resource>
<resource> instructions for copying a resource N </resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
Este complemento se llamará durante la fase de validación. Usando la etiqueta, <outputDirectory>
puede establecer el directorio donde el complemento debe copiar los recursos especificados en el archivo <resources>
. Y aquí es donde el complemento puede desplegarse en todo su poder.
2.2 Filtrado de recursos con maven-resources-plugin
Los recursos del complemento se pueden especificar no solo en forma de archivos, sino inmediatamente en forma de directorios. Además, se puede agregar una máscara al directorio, que especifica qué archivos se incluirán en este recurso.
Ejemplo:
<resource>
<directory>src/main/resources/images</directory>
<includes>
<include>**/*.png</include>
</includes>
</resource>
Dos asteriscos como máscara representan cualquier número de directorios . En el ejemplo anterior, todos los archivos png contenidos en el directorio src/main/resources/images
(y sus subdirectorios) se tomarán como datos de recursos.
Si desea excluir algunos archivos, puede utilizar la extensión exclude
. Ejemplo:
<resource>
<directory>src/main/resources/images</directory>
<includes>
<include>**/*.png</include>
</includes>
<excludes>
<exclude>old/*.png</exclude>
</excludes>
</resource>
Las etiquetas se aplican secuencialmente: primero, los archivos de inclusión especificados en los archivos de inclusión se agregarán al recurso y luego los archivos de exclusión se excluirán de esta lista.
Pero eso no es todo. El complemento puede buscar dentro de los archivos (si son de texto, por supuesto). Y, por ejemplo, agregue application.properties
la versión requerida del ensamblaje al archivo. Para que el complemento procese el contenido del archivo, debe especificar el parámetro <filtering>true</filtering>
.
Ejemplo:
<resource>
<directory>src/main/resources/properties</directory>
<filtering>true</filtering>
<includes>
<include>**/*. properties </include>
</includes>
</resource>
Se pueden encontrar más detalles sobre este complemento en el enlace: https://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
Complemento de inclusión de fuente 2.3 maven-source-plugin
Otro complemento útil: maven-source-plugin
le permite incluir el código fuente de sus archivos Java en el ensamblaje. ¿Para qué?
El caso es que, además de las aplicaciones web, se ensamblan una gran cantidad de bibliotecas utilizando Maven. Muchos proyectos de Java siguen el concepto de código abierto y se distribuyen a la comunidad de Java con sus propias fuentes.
¿Por qué necesita un complemento separado? ¿Por qué no puedes simplemente copiar la fuente y listo?
Primero, en cualquier proyecto complejo, las fuentes se pueden almacenar en varios lugares.
En segundo lugar, a menudo se utiliza la generación de fuentes basadas en especificaciones xml, dichas fuentes también deben incluirse en el ensamblaje.
Y en tercer lugar, puede decidir no incluir ningún archivo especialmente secreto en su ensamblaje.
Un ejemplo del uso del complemento maven-source-plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
2.4 complemento de copia de dependencia maven-dependency-plugin
Es posible que también deba copiar de forma inteligente las dependencias (bibliotecas) al crear un proyecto. Para ello se utiliza un complemento maven-dependency-plugin
.
Ejemplo:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<outputDirectory>
${project.build.directory}/lib/
</outputDirectory>
</configuration>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
</executions>
</plugin>
En este ejemplo, se escribe el comportamiento predeterminado del complemento: copiar bibliotecas al archivo ${project.build.directory}/lib
.
La sección de ejecución indica que se llamará al complemento durante la fase de compilación: paquete, objetivo, dependencias de copia.
En general, este complemento tiene un conjunto bastante grande de objetivos, aquí están los más populares:
1 | dependencia: analizar | análisis de dependencia (usado, no usado, especificado, no especificado) |
2 | dependencia: analizar-duplicar | identificando dependencias duplicadas |
3 | dependencia: resolver | resolución (definición) de todas las dependencias |
4 | dependencia: resolver-complemento | permiso (definición) de todos los complementos |
5 | dependencia:árbol | mostrando el árbol de dependencia |
También puede establecer parámetros adicionales en la sección de configuración:
1 | directorio de salida | Directorio donde se copiarán las dependencias |
2 | overWriteReleases | Marcar para sobrescribir dependencias al crear una versión |
3 | overWriteSnapshots | Marcar para sobrescribir dependencias no terminales que tienen SNAPSHOT |
4 | overWriteIfNewer | Marcar para sobrescribir bibliotecas con versiones más nuevas |
Ejemplo:
<configuration>
<outputDirectory>
${project.build.directory}/lib/
</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
Por defecto <overWriteReleases>
, y <overWriteSnapshots>
es falso, porque <overWriteIfNewer>
es verdadero.
GO TO FULL VERSION