Java Maven build在访问project lombok注释的方法时找不到符号,
我是第一次使用ProjectLombok,当我运行构建时,我遇到了通过maven编译项目的问题,在调用用ProjectLombok注释注释的方法时,我收到了错误 这是带注释的参数:Java Maven build在访问project lombok注释的方法时找不到符号,,java,maven,lombok,Java,Maven,Lombok,我是第一次使用ProjectLombok,当我运行构建时,我遇到了通过maven编译项目的问题,在调用用ProjectLombok注释注释的方法时,我收到了错误 这是带注释的参数: private @Getter @Setter String paymentNonce = null; 例如,在这一行中,maven破坏了构建: if (!StringUtilities.isNullOrEmpty(getPaymentNonce())) { 这是我对maven的依赖 <depend
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>
我正在使用java 8可能是您在java编译(javac)中指定了
-proc:none
或使用-processor
明确指定了注释处理器吗?我已将lombok降级为1.14.8此版本可与maven build一起使用,我还没有发现1.16 verson不起作用的原因:(使用maven编译器插件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>
org.apache.maven.plugins
maven编译器插件
3.5
...
希望这有帮助简而言之,将
maven编译器插件升级到2.4
,或将lombok
降级到1.14.
似乎2.4
下面的maven编译器插件
不支持名称为$
的javax.annotation.processing.Processor
更新:您可以将maven编译器插件配置为fork
,或将plexus编译器javac
更新为1.8.6
(maven编译器插件2.3.2
需要1.8.1
,而2.4
需要1.8.6
)
由于1.16
,lombok使用ShadowClassLoader
,这会阻止lombok内部类的IDE升级。但是,如果类加载器是org.codehaus.plexus.compiler.javac.IsolatedClassLoader
,则它不会使用ShadowClassLoader
。(我不知道为什么lombok的家伙使用硬代码来解决其他可能与plexus编译器javac
有关的问题)
maven编译器插件
2.4
,或者更确切地说,plexus编译器javac
1.8.6
,没有使用org.codehaus.plexus.compiler.javac.IsolatedClassLoader
,所以它再次工作。在我的例子中,它是通过升级JDK解决的(当时是1.8.0\u 66,现在是1.8.0\u 92)如果您在静态类中使用lombok注释,在这种情况下,您必须提及类的全名,即@Data
而不是@lombok.Data
。这对我很有效。如果您在静态导入中使用与lombok相关的静态方法(主要是@Builder),您可能会遇到类似的问题(甚至在代码的其他部分!)
有一个悬而未决的问题:
当前的解决方法是不使用静态导入,例如更改
import static my.org.Foo.FooBuilder
...
FooBuilder builder = Foo.builder();
致:
Foo.FooBuilder=Foo.builder();//注意>>Foo.我的解决方案是在注释前面加上lombok包名
@lombok.Builder
@lombok.experimental.Accessors(prefix = "m", chain = true)
而不是
@Builder
@Accessors(prefix = "m", chain = true)
尝试在依赖项中为“lombok”模块指定参数。我遇到了同样的问题,并通过此解决方案解决了此问题。我实际上能够通过以下发布的答案解决此问题:
基本上,我不得不将lombok
添加到maven编译器插件中
我不知道,但出于某种原因,它解决了我的问题
我有两个类使用@Builder生成一个构建方法。但是一个是正常的,另一个是异常的。我已经检查了所有内容,看起来还可以。
但是当我运行mvn
来编译我的项目时,错误如下:
找不到符号
方法生成器()
类A正确编译,但类B报告上述问题
我试图替换Lombok JAR的版本,但即使我将该版本设置为最新版本,也不行
所以,我尝试按照我引用的每个类导入Lombok
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
class B {
}
它很有效!这似乎是一个bug。对于使用JDK9及以上版本的其他用户,您应该向maven编译器插件添加AnnotationProcessorPath
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</path>
</annotationProcessorPaths>
org.projectlombok
龙目
1.18.16
实际上,如果我将日志版本降级到1.14.8,它就可以工作了,只有1.16以后的新版本不起作用。这与proc无关。maven 3.0.5、Netbeans 8.0.2、java 1.8.072-internal也经历了同样的情况;OpenJDK 64位服务器VM 25.72-b05和降级到1.14.8使maven正确编译。我已经成功地编译了几次直接使用1.16,但过了一段时间,它开始抛出错误:找不到符号
请看我的答案,它将在lombok的下一个版本中修复。这解决了我的问题!在我的情况下,getter和setter不是在Android Studio中生成的。这个解决方案在maven编译器插件:3.5.1
中仍然有效。我已经尝试过版本maven编译器插件:3.5.1
和maven编译器插件:3.7.0
但是只有maven编译器插件:3.5
可以与Lombok一起使用,因为meIt不是一个与jdk相关的问题。我在上看到对特定jdk版本的提及。如果有人知道为什么这个特定问题不能与jdk相关,请分享。a已经合并,将在lo中mbok 1.16.9+.A所以请尝试一下并给出反馈。+1这解决了我的问题。我现在使用的评论中提到了另一个变通方法:“变通方法是创建一个静态方法,在类中返回生成器,并使用该方法而不是lombok生成的方法。”在我的例子中,这个解决方案适用于嵌套类上的lombok注释。
import lombok.*;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
class A {
}
import lombok.*;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
class B {
}
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
class B {
}
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</path>
</annotationProcessorPaths>