1.1 Lista de complementos para compilar en Maven
El ensamblaje en Maven se puede configurar de manera muy flexible. Los desarrolladores de Maven han creado especialmente docenas de complementos, con los cuales puede configurar varias compilaciones de manera muy flexible. Los más populares se muestran en la siguiente tabla:
enchufar | Descripción | |
---|---|---|
1 | maven-compilador-complemento | Administra la compilación de Java |
2 | maven-resources-plugin | Controla la inclusión de recursos en un ensamblaje. |
3 | Complemento de fuente experta | Controla si el código fuente está incluido en un ensamblado |
4 | Complemento de dependencia de maven | Controla el proceso de copia de bibliotecas de dependencia |
5 | maven-jar-complemento | Complemento para crear el archivo jar final |
6 | Complemento de war experto | Complemento para crear el archivo de war final |
7 | maven-surefire-plugin | Gestiona las ejecuciones de prueba |
8 | buildnumber-maven-complemento | Genera un número de compilación |
Cada complemento es interesante a su manera, pero tendremos que analizarlos todos. Comencemos con lo principal: el complemento de administración de compilación.
1.2 Complemento de compilación maven-compiler-plugin
El complemento más popular que le permite controlar la versión del compilador y se usa en casi todos los proyectos es el maven-compiler-plugin
. Tiene configuraciones predeterminadas, pero en casi todos los proyectos deben configurarse nuevamente.
En la versión más simple, en el complemento, debe especificar la versión del código fuente de Java y la versión de la máquina Java bajo la cual se realiza el ensamblaje:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.11</source>
<target>1.13</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
En el ejemplo anterior, configuramos tres opciones del compilador de Java: source
, target
y encoding
.
El parámetro source
nos permite establecer la versión de Java para nuestras fuentes. El parámetro target
es la versión de la máquina Java bajo la cual desea compilar las clases. Si no se especifica ningún código o versión de la máquina Java, el valor predeterminado es 1.3
Finalmente, el parámetro encoding
le permite especificar la codificación de archivos Java. Indicamos UTF-8
. Ahora casi todas las fuentes se almacenan en UTF-8
. Pero si no se especifica este parámetro, se seleccionará la codificación actual del sistema operativo. Para Windows, esta es la codificación Windows-1251
.
También hay casos en los que la computadora de compilación tiene varias versiones de Java instaladas: para compilar diferentes módulos y/o diferentes proyectos. En este caso, JAVA_HOME
solo se puede especificar en la variable la ruta a uno de ellos.
Además, existen diferentes implementaciones de la máquina Java: OpenJDK, OracleJDK, Amazon JDK. Y cuanto más grande es el proyecto, más compleja es su estructura. Pero puede establecer explícitamente la ruta al compilador javac para el complemento usando la etiqueta
El complemento maven-compiler-plugin
tiene dos objetivos:
compiler:compile
– compilación de fuentes, por defecto asociado con la fase de compilacióncompiler:testCompile
– compilación de pruebas, por defecto está asociado a la fase de prueba-compilación.
También puede especificar una lista de argumentos para pasar al compilador javac en la línea de comando:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<compilerArgs>
<arg>-verbose</arg>
<arg>-Xlint:all,-options,-path<arg>
</compilerArgs>
</configuration>
</plugin>
1.3 Complemento para crear un archivo jar maven-jar-plugin
Si desea crear su propia biblioteca jar con Maven, necesitará el complemento maven-jar. Este complemento hace muchas cosas útiles.
Un ejemplo de tal complemento:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<includes>
<include>**/properties/*</include>
</includes>
<archive>
<manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
Primero, se puede usar para especificar qué archivos irán a la biblioteca y cuáles no. Usando etiquetas <include>
en la sección, <includes>
puede especificar una lista de directorios cuyo contenido debe agregarse a la biblioteca .
En segundo lugar, cada jar debe tener un manifiesto ( archivo MANIFEST.MF ). El complemento en sí lo colocará en el lugar correcto en la biblioteca, solo necesita especificar qué ruta tomar. La etiqueta se utiliza para esto <manifestFile>
.
Finalmente, el complemento puede generar un manifiesto por sí solo. Para hacer esto, en lugar de una etiqueta, <manifestFile>
debe agregar una etiqueta <manifest>
y especificar datos para el manifiesto futuro en ella. Ejemplo:
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.codegym.MainApplication</mainClass>
</manifest>
</archive>
</configuration>
La etiqueta <addClasspath>
especifica si se debe agregar al manifiesto CLASSPATH
.
La etiqueta <classpathPrefix>
le permite agregar un prefijo (en la biblioteca de ejemplo) antes de cada recurso. Especificar un prefijo en <classpathPrefix>
le permite colocar dependencias en una carpeta separada.
Sí, puede colocar bibliotecas dentro de otra biblioteca. Y hay muchas sorpresas esperándote cuando necesites pasar la ruta al archivo de propiedades en alguna parte, que está en la biblioteca jar, que está en la biblioteca jar.
Finalmente, la etiqueta <mainClass>
apunta a la clase ejecutable principal. “¿Cuál es la clase ejecutable principal? ", - usted pregunta. Y es que una máquina Java puede ejecutar un programa especificado no solo por una clase Java, sino también por un archivo jar. Y es para este caso que se necesita la clase inicial principal.
1.4 Complemento de generación de números de compilación buildnumber-maven-plugin
Muy a menudo, las bibliotecas jar y los archivos war incluyen información con el nombre del proyecto y su versión, así como la versión del ensamblado. Esto no solo es útil para administrar dependencias, sino que también simplifica las pruebas: está claro en qué versión de la biblioteca se corrige el error y en cuál se agrega.
La mayoría de las veces, esta tarea se resuelve así: crean un archivo especial application.properties
que contiene toda la información necesaria y lo incluyen en el ensamblaje. También puede configurar el script de compilación para que los datos de este archivo migren a MANIFEST.MF
etc.
Pero lo más interesante es que Maven tiene un complemento especial que puede generar dicho archivo application.properties. Para hacer esto, debe crear dicho archivo y llenarlo con plantillas de datos especiales. Ejemplo:
# application.properties
app.name=${pom.name}
app.version=${pom.version}
app.build=${buildNumber}
Los valores de los tres parámetros se sustituirán en la etapa de construcción.
Los parámetros pom.name
y pom.version
se tomarán directamente de pom.xml
. Y para generar un número de compilación único en Maven, hay un complemento especial: buildnumber-maven-plugin
. Vea el ejemplo a continuación:
<packaging>war</packaging>
<version>1.0</version>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<revisionOnScmFailure>true</revisionOnScmFailure>
<format>{0}-{1,date,yyyyMMdd}</format>
<items>
<item>${project.version}</item>
<item>timestamp</item>
</items>
</configuration>
</plugin>
</plugins>
En el ejemplo anterior, suceden tres cosas importantes. En primer lugar, se especifica el propio complemento para configurar la versión del ensamblado . En segundo lugar, se especifica que se ejecutará durante la fase de validación (la primera fase) y generará un número de compilación: ${buildNumber}
.
Y en tercer lugar, se indica el formato de este número de ensamblaje, que se pega en varias partes . Esta es la versión del proyecto project.version
y la hora actual proporcionada por la plantilla. El formato de la plantilla lo especifica la clase Java MessageFormat
.
GO TO FULL VERSION