如何将 lombok 和 JPAMetalModel 处理器与 Maven 共存
How to cohexist lombok and JPAMetalModel processors with maven
如何在 Maven 构建中激活 JPAMetaModelEntityProcessor 注释处理器时使用 Lombok。
Maven 配置:
[...]
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArguments>
<processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor>
</compilerArguments>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
[...]
在构建过程中 (mvn clean install),MetaModel 对象生成正确,但 Lombok Annotation 处理器似乎不再添加到 Javac 编译中。所有@Getter、@Setter、...都不起作用。
查看 lombok 项目后,我找到了解决方案。
将 JPAMetaModelEntityProcessor 指定为 javac 注释处理器时,似乎删除了 lombok 处理器。
要纠正这个问题,我们可以简单地在 maven-compiler-plugin 中添加 Lombok 注释处理器:
[...]
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArguments>
<processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor,lombok.launch.AnnotationProcessorHider$AnnotationProcessor</processor>
</compilerArguments>
</configuration>
</plugin>
[...]
@Pierrick 的解决方案是正确的。但我可以提供这个解决方案。因为我们可以用这个添加很多处理器。
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>5.4.1.Final</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
@Pierrick 的解决方案不完全正确。您必须切换处理器的顺序。
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArguments>
<processor>
lombok.launch.AnnotationProcessorHider$AnnotationProcessor,org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
</processor>
</compilerArguments>
</configuration>
</plugin>
如何在 Maven 构建中激活 JPAMetaModelEntityProcessor 注释处理器时使用 Lombok。
Maven 配置:
[...]
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArguments>
<processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor>
</compilerArguments>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
[...]
在构建过程中 (mvn clean install),MetaModel 对象生成正确,但 Lombok Annotation 处理器似乎不再添加到 Javac 编译中。所有@Getter、@Setter、...都不起作用。
查看 lombok 项目后,我找到了解决方案。
将 JPAMetaModelEntityProcessor 指定为 javac 注释处理器时,似乎删除了 lombok 处理器。
要纠正这个问题,我们可以简单地在 maven-compiler-plugin 中添加 Lombok 注释处理器:
[...]
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArguments>
<processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor,lombok.launch.AnnotationProcessorHider$AnnotationProcessor</processor>
</compilerArguments>
</configuration>
</plugin>
[...]
@Pierrick 的解决方案是正确的。但我可以提供这个解决方案。因为我们可以用这个添加很多处理器。
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>5.4.1.Final</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
@Pierrick 的解决方案不完全正确。您必须切换处理器的顺序。
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArguments>
<processor>
lombok.launch.AnnotationProcessorHider$AnnotationProcessor,org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
</processor>
</compilerArguments>
</configuration>
</plugin>