web-dev-qa-db-fra.com

La construction Maven ne trouve pas le symbole lors de l’accès aux méthodes annotées du projet Lombok,

J'utilise le projet lombok pour la première fois et j'ai des problèmes à le compiler via maven lorsque je lance la construction. Je reçois des erreurs dans lesquelles les méthodes annotées avec le projet lombok sont appelées.

C'est le paramètre annoté:

    private @Getter @Setter String paymentNonce = null;

et dans cette ligne par exemple le maven casse la construction:

if (!StringUtilities.isNullOrEmpty(getPaymentNonce())) {

c'est ma dépendance maven 

<dependency> 
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.4</version> 
</dependency>

l'erreur 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
.....

J'utilise Java 8

25
simonC

J'ai abaissé le lombok à 1.14.8 cette version fonctionne avec maven build, je n'ai pas trouvé pourquoi la version 1.16 ne fonctionne pas 

8
simonC

Avait le même problème en utilisant maven-compiler-plugin v.2.3.2 Après la mise à jour de la version jusqu'à la version 3.5

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.5</version>
    <configuration>
        ...
    </configuration>
</plugin>

J'espère que cela t'aides

31
Andrew Onischenko

En bref, mettez à niveau maven-compiler-plugin vers le niveau supérieur 2.4 ou rétrogradez lombok vers le niveau inférieur à 1.14.*.

Il semble que maven-compiler-plugin ci-dessous 2.4 ne supporte pas javax.annotation.processing.Processor avec un nom avec $.

Mise à jour: Vous pouvez configurer maven-compiler-plugin à fork ou mettre à jour plexus-compiler-javac à 1.8.6. (maven-compiler-plugin2.3.2 requiert 1.8.1 et 2.4 requiert 1.8.6)

Depuis 1.16, lombok utilise ShadowClassLoader, ce qui empêche la promotion IDE pour la classe interne de lombok. Cependant, il n'utilise pas ShadowClassLoader si le chargeur de classe est org.codehaus.plexus.compiler.javac.IsolatedClassLoader. (Je ne sais pas pourquoi les gars de Lombok utilisent un code dur pour résoudre un autre problème may lié à plexus-compiler-javac.)

maven-compiler-plugin2.4, ou plutôt, plexus-compiler-javac1.8.6, n'utilise pas org.codehaus.plexus.compiler.javac.IsolatedClassLoader, donc cela fonctionne à nouveau.

3
liudongmiao

Ma solution consistait à préfixer l'annotation avec le nom du paquetage lombok.

@lombok.Builder
@lombok.experimental.Accessors(prefix = "m", chain = true)

plutôt que

@Builder
@Accessors(prefix = "m", chain = true)
2
B. Stackhouse

J'ai été en mesure de résoudre ce problème en suivant une réponse publiée ici:

MapStruct et Lombok ne fonctionnent pas ensemble

Fondamentalement, je devais ajouter lombok au maven-compiler-plugin<annotationProcessorPaths>

2
Fabian

Si vous utilisez des annotations de lombok dans des classes statiques, vous devrez mentionner le nom complet de la classe, c.-à-d. au lieu de @Data à @lombok.Data. Cela a fonctionné pour moi.

2
vishal

Si vous utilisez des méthodes statiques liées à Lombok (principalement @Builder) avec des importations statiques, vous pouvez rencontrer des problèmes similaires (même dans d'autres parties de votre code!).

Il y a un numéro en suspens à ce sujet: https://github.com/rzwitserloot/lombok/issues/979

La solution de contournement actuelle consiste simplement à ne pas utiliser les importations statiques, par exemple. changement 

import static my.org.Foo.FooBuilder
 ...
FooBuilder builder = Foo.builder();

à: 

Foo.FooBuilder builder = Foo.builder(); // note >>Foo.<<FooBuilder; without static import
2
gilad

essayez de spécifier le paramètre pour le module "lombok" dans les dépendances.J'ai fait face au même problème et résolu cela par ce travail.

0
0x52616A657368

Je ne sais pas, mais pour une raison quelconque, cela résout mon problème.

J'ai deux classes qui utilisent @Builder pour générer une méthode de construction. Mais l'un est normal, l'autre est anormal. J'ai tout vérifié et ça a l'air d'aller. Mais lorsque je lance mvn pour compiler mon projet, l'erreur est la suivante:

Impossible de trouver le constructeur de méthode de symbole ()

import lombok.*;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
class A {

}


import lombok.*;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
class B {

}

La classe A compile correctement, mais la classe B rapporte le problème ci-dessus.

J'ai essayé de remplacer la version du fichier JAR de Lombok, mais même si j'ai défini la version la plus récente, ce n'est pas correct.

J'ai donc essayé d'importer Lombok par classe à laquelle je fais référence.

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
class B {

}

Ça marche! Cela semble un bug.

0
朱正欢

Dans mon cas, cela a été résolu en mettant à niveau JDK (était 1.8.0_66, maintenant 1.8.0_92)

0
Vituel

Se pourrait-il que vous ayez spécifié -proc:none ou explicitement des processeurs d'annotation utilisant -processor <processorclass> dans votre compilation Java (javac)?

0
Roel Spilker