java - parseable - Maven build no puede encontrar el símbolo al acceder a los métodos anotados de lombok del proyecto,
lombok project java (10)
Estoy usando el proyecto lombok por primera vez y tengo problemas para compilar el proyecto a través de maven cuando ejecuto la compilación Recibo errores cuando se llaman métodos anotados con anotaciones del proyecto lombok.
Este es el parámetro anotado:
private @Getter @Setter String paymentNonce = null;
y en esta línea, por ejemplo, el experto rompe la construcción:
if (!StringUtilities.isNullOrEmpty(getPaymentNonce())) {
esta es mi dependencia maven
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.4</version>
</dependency>
El error de Maven:
[INFO] Compiling 158 source files to C:/java/repos/luna/cloudflow/cloudflow-ejb/target/classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /java/repos/luna/cloudflow/cloudflow-ejb/src/main/java/si/arctur/controller/PaymentProcessor.java:[94,38] error: cannot find symbol
[ERROR] /java/repos/luna/cloudflow/cloudflow-ejb/src/main/java/si/arctur/controller/PaymentProcessor.java:[97,106] error: cannot find symbol
[ERROR] /java/repos/luna/cloudflow/cloudflow-ejb/src/main/java/si/arctur/controller/PaymentProcessor.java:[142,2] error: cannot find symbol
[ERROR] /java/repos/luna/cloudflow/cloudflow-ejb/src/main/java/si/arctur/controller/ShoppingCart.java:[27,6] error: cannot find symbol
[ERROR] /java/repos/luna/cloudflow/cloudflow-ejb/src/main/java/si/arctur/controller/ShoppingCart.java:[32,75] error: cannot find symbol
.....
Estoy usando java 8
¿Podría ser que hayas especificado -proc:none
o los procesadores de anotación especificados explícitamente usando -processor <processorclass>
en tu compilación de java (javac)?
De hecho, pude resolver esto siguiendo una respuesta publicada aquí:
MapStruct y Lombok no trabajan juntos
Básicamente tuve que agregar lombok
a la maven-compiler-plugin
<annotationProcessorPaths>
En mi caso, se resolvió mediante la actualización de JDK (era 1.8.0_66, ahora 1.8.0_92)
En resumen, actualizar maven-compiler-plugin
a 2.4
, o rebajar lombok
a menos de 1.14.*
.
Parece que maven-compiler-plugin
por debajo de 2.4
no admite javax.annotation.processing.Processor
con un nombre con $
.
Actualización: puede configurar maven-compiler-plugin
to fork
, o actualizar plexus-compiler-javac
a 1.8.6
. ( maven-compiler-plugin
2.3.2
requiere 1.8.1
, y 2.4
requiere 1.8.6
)
Desde 1.16
, lombok usa ShadowClassLoader
, que impide la promoción de IDE para la clase interna de lombok. Sin embargo, no usa ShadowClassLoader
si el cargador de clases es org.codehaus.plexus.compiler.javac.IsolatedClassLoader
. (No sé por qué los chicos lombok usan código duro para resolver otro problema relacionado con plexus-compiler-javac
).
maven-compiler-plugin
2.4
, o mejor dicho, plexus-compiler-javac
1.8.6
, no usa org.codehaus.plexus.compiler.javac.IsolatedClassLoader
, así que vuelve a funcionar.
He bajado la versión de lombok a 1.14.8 esta versión funciona con maven build, no he encontrado por qué la versión 1.16 verson no funciona :(
Mi solución fue prefijar la anotación con el nombre del paquete lombok.
@lombok.Builder
@lombok.experimental.Accessors(prefix = "m", chain = true)
más bien que
@Builder
@Accessors(prefix = "m", chain = true)
Si está utilizando las anotaciones lombok en clases estáticas, en ese caso tendrá que mencionar el nombre completo de la clase, es decir. En lugar de @Data
a @lombok.Data
. Esto ha funcionado para mí.
Si está utilizando métodos estáticos relacionados con Lombok (principalmente @Builder) con importaciones estáticas, puede experimentar problemas similares (¡incluso en otras partes de su código!).
Hay un problema abierto al respecto: https://github.com/rzwitserloot/lombok/issues/979
La solución actual es simplemente no usar importaciones estáticas, por ejemplo, cambios
import static my.org.Foo.FooBuilder
...
FooBuilder builder = Foo.builder();
a:
Foo.FooBuilder builder = Foo.builder(); // note >>Foo.<<FooBuilder; without static import
Tuvo el mismo problema al usar maven-compiler-plugin v.2.3.2 Después de actualizar la versión hasta 3.5, el problema desapareció
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5</version>
<configuration>
...
</configuration>
</plugin>
Espero que esto ayude
intente especificar el parámetro para el módulo "lombok" dentro de las dependencias. Me enfrenté al mismo problema y lo resolví por este trabajo.