【问题标题】:How to cohexist lombok and JPAMetalModel processors with maven如何将 lombok 和 JPAMetalModel 处理器与 maven 合并
【发布时间】:2015-10-26 14:59:36
【问题描述】:

在 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、...都不起作用。

【问题讨论】:

  • 您使用的是哪个版本的 Java?据我所知,Lombok 在使用 Java 8 方面存在问题。

标签: java maven jpa lombok


【解决方案1】:

查看 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>
[...]

【讨论】:

  • 像这样添加 Lombok 也适用于 maven-processor-plugin。
【解决方案2】:

@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>

【讨论】:

    【解决方案3】:

    @Pierrick 不完全正确时的解决方案。您必须切换处理器的顺序。

    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <compilerArguments>
                <processor>
                    lombok.launch.AnnotationProcessorHider$AnnotationProcessor,org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
                </processor>
            </compilerArguments>
        </configuration>
    </plugin>
    

    【讨论】:

      猜你喜欢
      • 2018-01-29
      • 2020-12-12
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      • 2016-08-10
      • 1970-01-01
      • 2014-06-22
      • 1970-01-01
      相关资源
      最近更新 更多