我在测试我的应用程序时遇到了这个问题,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>
看到@DarrenForsythe 的评论后,我从 maven-compiler 的配置中删除了 mapstruct commentProcessorPaths 它工作得很好。 如果您使用任何其他可能导致冲突的注释处理器
这可能对您有帮助:https://github.com/rzwitserloot/lombok/issues/1468 检查一下您是否有以下问题:
在同一类中定义两次具有相同签名的方法,或者 在同一个类中定义两次具有相同名称的变量
公共类的名称与定义它的文件名不匹配
作者:gkostalkowicz github
另一个可能的根本原因是,如果现有
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
您是否在 pom.xml 文件中添加了项目 lombok 依赖项?
如果尚未完成,请尝试添加:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
</dependency>
看看是否有帮助。
美好的一天!