访问项目lombok注释方法时,Maven构建无法找到符号,
我第一次使用项目lombok并且我在运行构建时通过maven编译项目时遇到问题我收到错误,其中调用带有项目lombok注释的方法被调用。
这是带注释的参数:
private @Getter @Setter String paymentNonce = null;
例如,在这一行中,maven打破了构建:
if (!StringUtilities.isNullOrEmpty(getPaymentNonce())) {
这是我的maven依赖
org.projectlombok lombok 1.16.4
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
有使用maven-compiler-plugin v.2.3.2的相同问题更新版本达3.5后问题消失了
org.apache.maven.plugins maven-compiler-plugin 3.5 ...
希望这可以帮助
我已经将lombok降级为1.14.8这个版本适用于maven build,我还没有找到为什么1.16版本没有工作:(
简而言之,将maven-compiler-plugin
升级到2.4
,或者将lombok
降级到1.14.*
以下1.14.*
。
似乎 2.4
以下的maven-compiler-plugin
不支持名称为$
javax.annotation.processing.Processor
。
更新:您可以将maven-compiler-plugin
配置为fork
,或将plexus-compiler-javac
更新为1.8.6
。 ( maven-compiler-plugin
2.3.2
需要1.8.1
需要1.8.6
)
从1.16
, ShadowClassLoader
使用ShadowClassLoader
,它阻止了ShadowClassLoader
内部类的IDE升级。 但是,如果类加载器是org.codehaus.plexus.compiler.javac.IsolatedClassLoader
,则它不使用org.codehaus.plexus.compiler.javac.IsolatedClassLoader
。 (我不知道为什么lombok家伙使用硬代码解决其他问题可能与plexus-compiler-javac
。)
maven-compiler-plugin
2.4
,或者更确切地说, plexus-compiler-javac
1.8.6
,不使用org.codehaus.plexus.compiler.javac.IsolatedClassLoader
,所以它再次工作。
如果你在静态类中使用lombok注释,那么你将不得不提到类的全名,即。 而不是@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.<
我的解决方案是使用lombok包名称为注释添加前缀。
@lombok.Builder @lombok.experimental.Accessors(prefix = "m", chain = true)
而不是
@Builder @Accessors(prefix = "m", chain = true)
我实际上能够通过这里发布的答案来解决这个问题:
MapStruct和Lombok无法收集
基本上我不得不将lombok
添加到maven-compiler-plugin
可能是你在java编译(javac)中使用-processor
指定了-proc:none
或显式指定的注释处理器吗?
在我的情况下,它是通过升级JDK解决的(是1.8.0_66,现在是1.8.0_92)
尝试在依赖项中为“lombok”模块指定参数。我遇到了同样的问题并通过这项工作解决了这个问题。