Maven构建在访问项目lombok注释方法时找不到符号,

Maven build cannot find symbol when accessing project lombok annotated methods,

我是第一次使用项目 lombok,当我 运行 构建时,我通过 maven 编译项目时遇到问题 我收到错误,其中调用了项目 lombok 注释注释的方法。

这是注释参数:

    private @Getter @Setter String paymentNonce = null;

例如,在这一行中,maven 破坏了构建:

if (!StringUtilities.isNullOrEmpty(getPaymentNonce())) {

这是我的 maven 依赖项

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

maven 错误:

[INFO] Compiling 158 source files to C:\java\repos\luna\cloudflow\cloudflow-ejb\target\classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] \java\repos\luna\cloudflow\cloudflow-ejb\src\main\java\si\arctur\controller\PaymentProcessor.java:[94,38] error: cannot find symbol
[ERROR] \java\repos\luna\cloudflow\cloudflow-ejb\src\main\java\si\arctur\controller\PaymentProcessor.java:[97,106] error: cannot find symbol
[ERROR] \java\repos\luna\cloudflow\cloudflow-ejb\src\main\java\si\arctur\controller\PaymentProcessor.java:[142,2] error: cannot find symbol
[ERROR] \java\repos\luna\cloudflow\cloudflow-ejb\src\main\java\si\arctur\controller\ShoppingCart.java:[27,6] error: cannot find symbol
[ERROR] \java\repos\luna\cloudflow\cloudflow-ejb\src\main\java\si\arctur\controller\ShoppingCart.java:[32,75] error: cannot find symbol
.....

我正在使用 java 8

会不会是您在 java 编译 (javac) 中使用 -processor <processorclass> 指定了 -proc:none 或明确指定了注释处理器?

我已经将 lombok 降级到 1.14.8 这个版本适用于 maven 构建,我还没有找到为什么 1.16 verson 不工作:(

使用 maven-compiler-plugin v.2.3.2 时遇到同样的问题 将版本更新到 3.5 后问题消失了

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.5</version>
    <configuration>
        ...
    </configuration>
</plugin>

希望对您有所帮助

简而言之,将 maven-compiler-plugin 升级到 2.4,或将 lombok 降级到 1.14.* 以下。

2.4下面的maven-compiler-plugin好像不支持javax.annotation.processing.Processor名字带$javax.annotation.processing.Processor.

更新:您可以将maven-compiler-plugin配置为fork,或将plexus-compiler-javac更新为1.8.6。 (maven-compiler-plugin 2.3.2 需要 1.8.12.4 需要 1.8.6

因为 1.16,lombok 使用 ShadowClassLoader,这阻止了 lombok 内部 class 的 IDE 提升。但是,如果 classloader 是 org.codehaus.plexus.compiler.javac.IsolatedClassLoader,它不会使用 ShadowClassLoader。 (我不知道为什么 lombok 的家伙使用硬代码来解决其他 可能 plexus-compiler-javac 相关的问题。)

maven-compiler-plugin 2.4,或者更确切地说,plexus-compiler-javac 1.8.6,不使用 org.codehaus.plexus.compiler.javac.IsolatedClassLoader,所以它再次起作用。

在我的例子中,它是通过升级 JDK 解决的(之前是 1.8.0_66,现在是 1.8.0_92)

如果您在静态 classes 中使用 lombok 注释,在这种情况下,您将不得不提及 class 即的全名。而不是 @Data@lombok.Data 。这对我有用。

如果您将 Lombok 相关的静态方法(主要是 @Builder)与静态导入一起使用,您可能会遇到类似的问题(甚至在代码的其他部分!)。

有一个未解决的问题:https://github.com/rzwitserloot/lombok/issues/979

当前的解决方法是不使用静态导入,例如改变

import static my.org.Foo.FooBuilder
 ...
FooBuilder builder = Foo.builder();

至:

Foo.FooBuilder builder = Foo.builder(); // note >>Foo.<<FooBuilder; without static import

我的解决方案是在注释前加上 lombok 包名称。

@lombok.Builder
@lombok.experimental.Accessors(prefix = "m", chain = true)

而不是

@Builder
@Accessors(prefix = "m", chain = true)

尝试为 dependencies.I 中的 "lombok" 模块指定参数遇到同样的问题并通过此解决方法解决了这个问题。

我实际上能够按照此处发布的答案解决此问题:

基本上我必须将 lombok 添加到 maven-compiler-plugin <annotationProcessorPaths>

我不知道,但出于某种原因它解决了我的问题。

我有两个 classes 使用 @Builder 生成构建方法。但一个正常,一个不正常。我已经检查了一切,看起来没问题。 但是当我运行mvn编译我的项目时,报错如下:

Can't not find the symbol method builder()

import lombok.*;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
class A {

}


import lombok.*;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
class B {

}

ClassA编译正确,但是ClassB报上面的问题

我尝试更换了Lombok JAR的版本,但即使我将版本设置为最新,也不行。

因此,我尝试根据我引用的 class 导入 Lombok。

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
class B {

}

有效!这似乎是一个错误。

对于使用 JDK9 及更高版本的其他用户,您应该将 annotationProcessorPaths 添加到 maven 编译器插件

<annotationProcessorPaths>
    <path>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.16</version>
    </path>
</annotationProcessorPaths>

对我来说,解决方案是 不要在 lombok 构建器上使用 import static。变化:

import static Foo.builder;

builder().id(1).build()

收件人:

Foo.builder().id(1).build()

在我的例子中,我遇到了这个错误,因为其他 class 中的编译错误,但 lombok 抑制了真正的问题。 我建议您查看 classes 以查找错误。 希望对你有帮助

就我而言,我修复了两个配置并且它有效。

  1. 有人在编译器参数中将编译器参数设置为 -proc:none:

     <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-compiler-plugin</artifactId>
         <version>${maven_compiler_version}</version>
         <configuration>
             <compilerArgs>
                 <!--remove below compiler arg fixed my problem-->
                 <compilerArg>-proc:none</compilerArg>
                 <compilerArg>-parameters</compilerArg>
             </compilerArgs>
             <fork>true</fork>
             <source>${java_source_version}</source>
             <target>${java_target_version}</target>
             <encoding>${file_encoding}</encoding>
         </configuration>
     </plugin>
    
  2. Build, Execution, Deployment > Compiler > Java Compiler > Use compilerAjc.

我使用 lombok 1.18.24 和 java 8.

删除-proc:none编译器参数并将编译器更改为javac后,项目可以在IDEA maven或standalone maven中编译。

我在maven-compiler-plugin

中设计了<annotationProcessor>
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.8.1</version>
      <configuration>
        <annotationProcessors>
          <annotationProcessor>lombok.launch.AnnotationProcessorHider$AnnotationProcessor</annotationProcessor>
        </annotationProcessors>
      </configuration>
    </plugin>
  </plugins>
</build>