mvn install 会为 Lombok 属性的 @Getter @Setter 属性产生编译错误

问题描述 投票:0回答:4

我在测试我的应用程序时遇到了这个问题,mvn 测试不会运行并产生编译问题,特别是在具有 Lombok 的 @Getter @Setter 注释的属性上。当 Intelij 插件工作时,IDE 中没有突出显示错误,但不知何故,maven 无法找到 Lombok。我看过与我的问题类似的帖子,但它们都有不同版本的 maven / lombok / maven-compiler。我的版本是 Maven - 3.5 、Maven 编译器 - 3.7 、Lombok 1.16.20。

我的带有 lombok 注释的 Java 类

@JsonProperty
@Getter @Setter private String name;


@JsonProperty
@Getter @Setter private String catType;


@JsonProperty
@Getter @Setter private String description;


@JsonProperty
@Getter @Setter private String intType;


@JsonProperty
@Getter @Setter private String numberCode;

当我运行 mvn install 时,我得到

> [my-path]/my-java.java:[86,29] cannot find symbol
[ERROR]   symbol:   method numberCode()
[ERROR]   location: variable source of type My-java
[my-path]/my-java.java:[86,29] cannot find symbol
[ERROR]   symbol:   method name()
[ERROR]   location: variable source of type My-java
[my-path]/my-java.java:[86,29] cannot find symbol
[ERROR]   symbol:   method catType()
[ERROR]   location: variable source of type My-java
[my-path]/my-java.java:[86,29] cannot find symbol
[ERROR]   symbol:   method description()
[ERROR]   location: variable source of type My-java 

这是我的 Pom.xml(因为这是一个非常冗长的 pom.xml,我只分享了在这个问题的上下文中可能重要的内容)

    <lombok.version>1.18.0</lombok.version>
 <maven-clean-plugin.version>2.6.1</maven-clean-plugin.version>
        <maven-compiler-plugin.version>3.7.0</maven-compiler-plugin.version>
        <maven-eclipse-plugin.version>2.10</maven-eclipse-plugin.version>
        <maven-enforcer-plugin.version>3.0.0-M1</maven-enforcer-plugin.version>
        <maven-resources-plugin.version>3.0.1</maven-resources-plugin.version>
        <maven-surefire-plugin.version>2.18.1</maven-surefire-plugin.version>
          <maven.version>3.0.0</maven.version>
        <java.version>1.8</java.version>
        <scala.version>2.12.1</scala.version>
        <node.version>v8.9.4</node.version>
        <yarn.version>v1.3.2</yarn.version>

  <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
            <scope>provided</scope>
        </dependency>
java maven maven-3 lombok
4个回答
1
投票

看到@DarrenForsythe 的评论后,我从 maven-compiler 的配置中删除了 mapstruct commentProcessorPaths 它工作得很好。 如果您使用任何其他可能导致冲突的注释处理器


0
投票

这可能对您有帮助:https://github.com/rzwitserloot/lombok/issues/1468 检查一下您是否有以下问题:

  1. 在同一类中定义两次具有相同签名的方法,或者 在同一个类中定义两次具有相同名称的变量

  2. 公共类的名称与定义它的文件名不匹配

    作者:gkostalkowicz github


0
投票

另一个可能的根本原因是,如果现有

maven-compiler-plugin
配置在
-proc:none
配置中设置
<compilerArgument>
,则该配置似乎优先于任何
<annotationProcessorPaths>
。 (大概是由于插件如何构建 Java 编译器调用)

作为一个实际示例,我只是在一个旧的存储库上工作,其中以前的开发人员具有以下插件定义:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>${plugin.compiler}</version>
  <configuration>
     <release>${java.version}</release>
     <compilerArgument>-proc:none</compilerArgument>
  </configuration>
</plugin>

当我盲目地将其更改为以下内容以添加 Lombok 支持时,它仍然无法编译:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>${plugin.compiler}</version>
  <configuration>
     <release>${java.version}</release>
     <compilerArgument>-proc:none</compilerArgument>
     <annotationProcessorPaths>
      <path>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${dependency.lombok}</version>
      </path>
    </annotationProcessorPaths>
  </configuration>
</plugin>

它不起作用,一旦我记得

-proc:none
禁用注释处理,我删除了不再相关的
<compilerArgument>
配置,给我以下内容:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>${plugin.compiler}</version>
  <configuration>
     <release>${java.version}</release>
     <annotationProcessorPaths>
      <path>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${dependency.lombok}</version>
      </path>
    </annotationProcessorPaths>
  </configuration>
</plugin>

这个配置让我编译成功了。

-proc:[无、仅、完整]

控制是否进行注释处理和编译。

-proc:none
表示编译不进行注释处理。
-proc:only
表示只进行注释处理,不做任何后续编译。如果不使用此选项,或者指定了
-proc:full
,则完成注释处理和编译。


-1
投票

您是否在 pom.xml 文件中添加了项目 lombok 依赖项?

如果尚未完成,请尝试添加:

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

看看是否有帮助。

美好的一天!

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.