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

时间:2015-12-18 15:15:50

标签: java maven lombok

我第一次使用项目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

11 个答案:

答案 0 :(得分:31)

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

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

希望这有帮助

答案 1 :(得分:8)

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

答案 2 :(得分:4)

我实际上可以通过点击这里发布的答案来解决这个问题:

MapStruct and Lombok not working togather

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

答案 3 :(得分:3)

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

maven-compiler-plugin以下的2.4似乎不支持名称为javax.annotation.processing.Processor的{​​{1}}。

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

1.8.6以来,lombok使用1.16,这阻止了lombok内部类的IDE升级。但是,如果类加载器为ShadowClassLoader,则不会使用ShadowClassLoader。 (我不知道为什么lombok家伙使用硬代码来解决可能org.codehaus.plexus.compiler.javac.IsolatedClassLoader相关的其他问题。)

plexus-compiler-javac maven-compiler-plugin,或者更确切地说,2.4 plexus-compiler-javac,不使用1.8.6,因此它再次有效。

答案 4 :(得分:3)

如果您正在使用与静态导入相关的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

答案 5 :(得分:3)

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

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

而不是

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

答案 6 :(得分:2)

如果你在静态类中使用lombok注释,那么你将不得不提到类的全名,即。代替@Data@lombok.Data。这对我有用。

答案 7 :(得分:0)

在我的情况下,通过升级JDK解决了问题(1.8.0_66,现在是1.8.0_92)

答案 8 :(得分:0)

尝试为&#34; lombok&#34;指定参数依赖关系中的模块。我遇到了同样的问题并通过这项工作解决了这个问题。

答案 9 :(得分:0)

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

我有两个使用@Builder生成构建方法的类。但是一个是正常的,另一个是异常的。我检查了所有内容,似乎还可以。 但是当我运行mvn来编译我的项目时,错误如下:

  

找不到符号   方法builder()

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

}


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

}

A类可以正确编译,但是B类报告上述问题。

我试图替换Lombok JAR的版本,但是即使将版本设置为最新,也不行。

因此,我尝试按我参考的每个类导入Lombok。

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

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
class B {

}

有效!似乎是个错误。

答案 10 :(得分:0)

对于使用 JDK9 及以上版本的其他用户,您应该在 maven 编译器插件中添加 annotationProcessorPaths

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