web-dev-qa-db-fra.com

Comment configurer Lombok avec maven-compiler-plugin?

J'ai un module racine et un sous-module dans maven dans le projet. J'essaie d'utiliser Lombok. J'ai ajouté

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.12</version>
    <scope>provided</scope>
</dependency>

pour rooter pom.xml. Dans le sous-module, j'ai une classe avec des annotations Lombok. Quand j'essaie de construire le projet, je reçois beaucoup de

impossible de trouver le symbole

où j'essaie d'appeler les getters et les setters.

J'ai essayé d'utiliser lombok-maven-plugin avec la même version (1.16.12) dans root pom et dans le sous-pom ainsi qu'avec delombok et en déplaçant ma classe annotée vers src/main/lombok, je ont examiné presque toutes les questions dans SO, essayez toutes les variantes, mais ne réussissez pas.

J'utilise Maven 3, Java 8, maven-compiler-plugin avec la version 3.6.1.

Comment dois-je configurer le projet pour pouvoir utiliser lombok? Ou peut-être que je me trompe.

12
O.Zaiats

J'utilisais Java 8 et @Getter(onMethod = @__({@NoSerialization})) et @Getter(onMethod = @__({@Translation(messageKey = "translation.key")})) annotations onX. Et j'obtiens duplicate element '<any?>' in annotation @<any?>. dans la sortie d'erreur. On dirait que les gars de Lombok ont ​​un tel problème avec Java 8 pendant longtemps lien vers le problème sur github . Lombok ne gère pas les annotations avec des paramètres tels que messageKey dans l'annotation ci-dessus. cela ne fonctionne qu'avec les annotations sans paramètres et les annotations avec uniquement le paramètre value (lorsque vous n'écrivez pas le nom du paramètre).

2
O.Zaiats

Ce n'est pas une réponse directe à la question, qui semble être résolue, mais sert de référence pour les futurs chercheurs:

Si vous utilisez Dagger (ou autre chose) pour traiter vos annotations comme

<build>
  <plugins>
    <plugin>
      <groupId>org.Apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.7.0</version>
      <configuration>
        <annotationProcessorPaths>
          <path>
            <groupId>com.google.dagger</groupId>
            <artifactId>dagger-compiler</artifactId>
            <version>2.15</version>
          </path>
        </annotationProcessorPaths>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>
    ....
  </plugins>
</build>

Vous devez ajouter ici lombok comme chemin comme

<build>
  <plugins>
    <plugin>
      <groupId>org.Apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.7.0</version>
      <configuration>
        <annotationProcessorPaths>
          <path>
            <groupId>com.google.dagger</groupId>
            <artifactId>dagger-compiler</artifactId>
            <version>2.15</version>
          </path>

          <!-- SOLUTION --> 
          <path>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.20</version>
          </path>


        </annotationProcessorPaths>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>
    ....
  </plugins>
</build>

Mais vous devez toujours lister lombok comme dépendance fournie;)

8
Ore

Si quelqu'un utilise JDK 11

    <build>
    <plugins>
        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <source>${Java.version}</source>
                <target>${Java.version}</target>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>${lombok.version}</version>
                    </path>
                </annotationProcessorPaths>
                <compilerArgs>
                    <arg>-sourcepath</arg>
                    <arg>${project.basedir}/src/main/Java${path.separator}${project.basedir}/target/generated-sources/annotations${path.separator}/</arg>
                </compilerArgs>
            </configuration>
        </plugin>
    </plugins>
</build>
5
Edgar Asatryan

Je ne sais pas quelle est la différence entre lombok et lombok-maven-plugin, mais mes projets sont configurés avec cette dépendance:

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok-maven-plugin</artifactId>
        <version>1.16.12.0</version>
    </dependency>

Je n'ai pas encore expérimenté avec les poms racine et sous-module, car mes projets ont tous tendance à être plutôt isolés les uns des autres. Je ne sais pas si cela pourrait vous causer un problème.

Si vous utilisez Eclipse, avez-vous exécuté le fichier lombok.jar et l'avez-vous dirigé vers votre fichier Eclipse.exe? il doit modifier le .exe pour qu'Eclipse sache que ces getters et setters arrivent, afin qu'Eclipse ne se plaint pas pendant le développement.

Edit: J'utilise maven-compiler-plugin:

        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
1
Dan N

Maven Groovy et Java + Lombok

La solution sur cette réponse de débordement de pile a fonctionné pour moi. J'ai manqué l'ajout de javaAgentClass plus tôt

0
Karthik Cherala