web-dev-qa-db-fra.com

AllArgsConstructor de lombok n'est pas trouvé par Android Studio

Lorsque je crée une nouvelle classe Java avec un ou plusieurs champs et que j'attache l'annotation @AllArgsConstructor de lombok, je reçois ce message.

Error:(9, 1) error: cannot find symbol class ConstructorProperties

à partir de la console Gradle Build. J'ai pu reproduire cela en créant un nouveau projet Android vide avec cette configuration.

La classe (jamais utilisée ou instanciée)

@lombok.AllArgsConstructor
public class Model {
    int foo;
    String bar;
}

build.gradle:

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.Android.support:appcompat-v7:21.0.3'
provided 'org.projectlombok:lombok:1.14.8'
}

@Getter et @Setter de lombok ne posent aucun problème et même le @NoArgsConstructor n'est pas mentionné par gradle, il en va de même de la AllArgsConstructor s'il n'y a pas de champs.

Est-ce un bug de Lombok ou ce bug se trouve-t-il devant l'écran?

20
Ohmen

Lombok génère le @ConstructorProperties par défaut pour tous les constructeurs générés. Sur Android, cette annotation n'est pas disponible. Comme indiqué dans la documentation , il est possible de supprimer la génération en spécifiant suppressConstructorProperties=true pour chaque @XxxArgsConstructor ou en utilisant la ligne suivante dans un fichier lombok.config de haut niveau:

lombok.anyConstructor.suppressConstructorProperties = true

Divulgation: Je suis un développeur de Lombok

47
Roel Spilker

Vous devez ajouter une suppression dans vos AllArgsConstructors. Si vous ne voulez pas ajouter un nouveau fichier de configuration, vous pouvez simplement faire ceci:

@AllArgsConstructor(suppressConstructorProperties = true)

Divulgation: Je ne suis pas un développeur de Lombok: D

27
Shubham Chaudhary

J'ai eu le même problème après la mise à jour d'Android Studio.

Aucune des autres réponses, y compris celle acceptée, ne m'a aidé.

Enfin, j'ai mis à jour la version de lombok avec 1.16.20 (le plus récent pour aujourd'hui) et l'erreur a disparu.

J'espère que cela fera gagner du temps à quelqu'un.

0
Vasily Kabunov

L'annotation suppressConstructorProperties n'est plus prise en charge par Lombok. Si vous essayez de supprimer (suppressConstructorProperties = true), vous obtiendrez le message d'erreur suivant:

Error:(9, 1) error: cannot find symbol class ConstructorProperties

Voici les étapes à suivre pour résoudre ce problème: 1. Supprimez (suppressConstructorProperties = true) de l'objet. 2. Accédez au répertoire de niveau projet. dans votre application et créez un fichier lombok.config. 3. Collez le code ci-dessous dans le fichier de configuration.

config.stopBubbling = true
lombok.addGeneratedAnnotation = false
lombok.accessors.chain = false
lombok.anyConstructor.suppressConstructorProperties = true
0
Sumit Saurabh

La solution @AllArgsConstructor(suppressConstructorProperties = true) ne fonctionne plus. Si vous essayez ceci, vous obtenez ce qui suit:

Cette fonctionnalité obsolète n'est plus prise en charge. Le retirer; vous pouvez créer un fichier lombok.config avec 'lombok.anyConstructor.suppressConstructorProperties = true'.

La solution de travail consiste à ajouter lombok.anyConstructor.suppressConstructorProperties = true au fichier lombok.config.

0
Ugurcan Yildirim

Également: 

Si vous ciblez Java 8 dans votre projet Android (en utilisant par exemple retrolambda), cette erreur ne s'affiche pas.

0
Diolor