Lombok 1.18.2与Maven和JDK 10不兼容。

3
当我尝试在JDK 10下编译我的Java项目时,Lombok没有创建getter/setter。
使用Lombok注解的类。
package com.testcompany.data;

import java.util.HashMap;
import java.util.Map;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
public class DataInfo {
    private Map<String,String> metadata = new HashMap<>();
    private String extractedString;
}

Lombok注解类的使用

String test = dataInfo.getExtractedString();

我使用以下版本来将我的源代码编译成Java 10:

  • maven(3.5.4)
  • maven-compiler-plugin 3.8.0
  • Java 10(子版本2)
  • Lombok 1.18.2

pom.xml文件中的依赖部分

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>${lombok.version}</version>
    <scope>provided</scope>
</dependency>

在maven-compiler-plugin部分中。
<annotationProcessorPaths>
    <path>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${lombok.version}</version>
    </path>
</annotationProcessorPaths>

当我通过mvn install编译时,我遇到了以下错误:
MemberRegistration.java:[50,36] cannot find symbol
  symbol:   method getExtractedString()
  location: variable dataInfo of type com.testcompany.data.DataInfo

在使用JDK 10时,是否需要采取不同的操作?


需要一个注解@Getters吗? - khmarbaise
不是,根据他们的文档:@Data 是一个方便的快捷注解,它将 @ToString@EqualsAndHashCode@Getter / @Setter@RequiredArgsConstructor 的功能捆绑在一起。 - Shannon
1
@Shannon 确实,@Data 就足够了,我可以确认您的依赖关系和 <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version><configuration><release>10</release><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.2</version></path></annotationProcessorPaths></configuration></plugin></plugins></build>,Maven 构建成功。 - Naman
我没有module-info.java文件,这个文件是必须的吗?另外,当你说构建成功时,是否意味着getter/setter已经被创建并可以使用? - Shannon
@nullpointer,据我所知,您的配置与我的相同,但您的项目可以正常工作。我可以发布我的测试示例项目(也许我会以某种方式上传它)。 - Shannon
显示剩余3条评论
1个回答

4

感谢所有人!主要问题是我使用了编译器参数-proc:none,这意味着“编译过程中没有注释处理…”。所以我删除了这个参数。除此之外,也建议使用以下编译器参数(见compilerArgs部分):

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.8.0</version>
  <configuration>
    <source>10</source>                                                
    <target>10</target>                                                
    <release>10</release>                                              
    <executable>javac10</executable>
    <fork>false</fork>                            
    <encoding>UTF-8</encoding>
    <!-- see https://github.com/rzwitserloot/lombok/issues/985#issuecomment-356135454 -->
    <compilerArgs>
        <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
        <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
        <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg>
        <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg>
        <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg>
        <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg>
        <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
        <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg>
        <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
        <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED</arg>
    </compilerArgs>
    <annotationProcessorPaths>
      <path>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.2</version>
      </path>
    </annotationProcessorPaths>
    <showWarnings>true</showWarnings>
  </configuration>
  <dependencies>                                                         
    <dependency>                                                       
      <groupId>org.ow2.asm</groupId>                                 
      <artifactId>asm</artifactId>                                   
      <version>6.2</version>
    </dependency>                                                      
  </dependencies>
  </plugin>
<plugin>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接