studio paquetes org mexico library language java maven lambda java-8 maven-plugin

java - paquetes - Maven Plugin Build falla cuando se usan Lambdas



r packages list (2)

Escribí un maven plugin / mojo para generar algún código. El complemento funciona bien y está construido en Java JDK 1.8.

Sin embargo, estoy viendo un comportamiento extraño: construye, instala, etc. bien si uso sintaxis pre-1.8, pero tan pronto como uso una expresión Java 8 Lambda, mvn clean install el siguiente error al ejecutar mvn clean install :

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor (default-descriptor) on project my-maven-plugin: Execution default-descriptor of goal org.apache.maven.plugins:maven-plugin-plugin:3.2:descriptor failed: 13557 -> [Help 1]

Aquí está mi pom:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.my.group.id</groupId> <artifactId>my-maven-plugin</artifactId> <packaging>maven-plugin</packaging> <version>1.0-SNAPSHOT</version> <name>My Maven Mojo</name> <url>http://maven.apache.org</url> <properties> <org.springframework.version>4.0.1.RELEASE</org.springframework.version> <joda-time.version>2.3</joda-time.version> </properties> <dependencies> <!-- several dependencies --> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <!-- The following manual call to the maven-plugin plugin is necessary to get around a bug in maven 3.1.1. If the build server gets updated to 3.2.2+ we can remove this --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-plugin-plugin</artifactId> <version>3.2</version> <configuration> <!-- see http://jira.codehaus.org/browse/MNG-5346 --> <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound> </configuration> <executions> <execution> <id>mojo-descriptor</id> <goals> <goal>descriptor</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <distributionManagement> <repository> <id>inin-release</id> <name>ININ Release Repository</name> <url>http://nexus.infrastructure.inintca.com/nexus/content/repositories/inin-release</url> </repository> <snapshotRepository> <id>inin-snapshot</id> <name>ININ Snapshot Repository</name> <url>http://nexus.infrastructure.inintca.com/nexus/content/repositories/inin-snapshot</url> </snapshotRepository> </distributionManagement> </project>

El problema aparece en este caso cuando intento usar un lambda para definir un FileFilter lugar de la clase interna anónima tradicional.

Esto funciona:

List<File> controllerFiles = Arrays.asList(packageDirFile.listFiles(new FileFilter() { @Override public boolean accept(File file) { return file.isFile() && file.getName().endsWith(".java"); } }));

Si bien esto produce el error mencionado anteriormente:

List<File> controllerFiles = Arrays.asList(packageDirFile.listFiles(file -> file.isFile() && file.getName().endsWith(".java")));

Obviamente, dado que tengo una solución alternativa, esto no es crítico, pero el lambda es mucho más limpio que el IMO de clase interna anónimo y dado que estoy trabajando en Java 8, preferiría usarlo. ¿Alguien tiene alguna sugerencia, sobre todo teniendo en cuenta que ya he configurado skipErrorNoDescriptorsFound en verdadero?


La nota en MPLUGIN-273 dice que las lambdas funcionan si la versión está usando maven-plugin-plugin versión 3.3 . El mensaje de error que se muestra hace referencia a maven-plugin-plugin versión 3.2 . Asegúrese de estar usando la versión correcta del complemento y vea si eso soluciona el problema.


Me acabo de dar cuenta de que respondí mi propia pregunta. En mi segundo comentario hay un enlace a un problema de Maven Jira, en el que alguien comentó que al subir la versión maven-plugin-plugin a 3.3 de 3.2 corrige el problema, y ​​después de probarlo descubrí lo mismo. Así que esto:

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-plugin-plugin</artifactId> <version>3.2</version> ... </plugin>

se convierte

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-plugin-plugin</artifactId> <version>3.3</version> ... </plugin>

Y el problema desaparece