Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven build在访问project lombok注释的方法时找不到符号,_Java_Maven_Lombok - Fatal编程技术网

Java Maven build在访问project lombok注释的方法时找不到符号,

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

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

这是带注释的参数:

    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>