多模块maven项目中JDK升级到JDK17时,Lombok 1.18.26无法找到符号

问题描述 投票:0回答:2

我将 Lombok 与 JDK8 一起使用,一切正常。然而,当我尝试升级到JDK17时,编译失败并出现错误

error: cannot find symbol
[ERROR]   symbol:   class Builder
cannot find symbol
[ERROR]   symbol:   method getKey()

在我的父母 pom 中,我有

<dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.26</version>
</dependency>

项目结构是:

MainProject
|
 -subProject1 --> pom1.xml
 -subProject2 --> pom2.xml
 -subProject3 --> pom3.xml
|
- Main pom.xml
- lombok.config

主要的pom.xml有

  <modules>
    <module>subProject1</module>
    <module>subProject2</module>
    <module>subProject3</module>
  </modules>

我在 Intellij 和 Mac 终端中遇到同样的问题,所以这个问题不是 Intellij 特有的。

尝试了互联网上的多种方法。在 lombok.config 中添加了 lombok.addLombokGenerateAnnotation = true。 在maven-compiler插件中尝试了

<annotationProcessorPaths>
。但没有任何效果。我完全被阻止了。请提出建议。

maven lombok java-17 intellij-lombok-plugin
2个回答
0
投票

maven-compiler-plugin 中的配置应该如下所示。属性

lombok.version
(版本:

  <properties>
    <maven.compiler.release>20</maven.compiler.release>
    <spring.boot.version>3.2.0-M2</spring.boot.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <lombok.version>1.18.28</lombok.version>
  </properties>


  <dependencyManagement>
    <dependencies>
      ...
      <dependency>
      <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${lombok.version}</version>
      </dependency>

      </dependency>
    </dependencies>
  </dependencyManagement>
  ...
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.11.0</version>
      <configuration>
        <annotationProcessorPaths>
          <path>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
          </path>
        </annotationProcessorPaths>
      </configuration>
    </plugin>

将 lombok 项目定义为真正使用它的模块中的依赖项也很重要:

<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <scope>provided</scope>
</dependency>

0
投票

各位, 从 Spring Boot 2.7 (JDK 8) 迁移到 Spring Boot 3.1.5 (JDK17; Maven 3.9.5) 后,我也遇到了这个问题:找不到符号

启动一个新项目表明设置正在按预期工作。所以它的项目相关。

验证:

  • Java 版本:17.0.9,供应商:Azul Systems, Inc.
  • Maven版本: /usr/local/Cellar/maven/3.9.5
  • Spring Boot版本:3.1.5
  • 龙目岛版本:1.18.30
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.db.orinoco.soa.sb</groupId>
    <artifactId>javaelevenstarter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>javaelevenstarter</name>
    <description>Demo project for Spring Boot 3 and JDK 17 (maven 3.9.5)</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-oauth2-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>
lombok.config

# Tell the @Slf4j annotation to generate the field 'LOG'.
lombok.log.fieldName = LOG
person.java

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
class Person {

    private String name;
    private String surname;
    private String town;
}
JavaElevenStarterApplicationTests.java

@Slf4j
@SpringBootTest
class JavaElevenStarterApplicationTests {

    @Test
    void contextLoads_lombock_AllArgsConstructor_Getter() {

        final Person person = new Person("Dave", "Developer", "Davetown");
        final String name = person.getName();
        final String surname = person.getSurname();
        final String town = person.getTown();

        LOG.info("Person data - Name: {}, surname: {}, town: {}", name, surname, town);
        Assert.hasText(name, "Dave");
        Assert.hasText(surname, "Developer");
        Assert.hasText(town, "Davetown");
    }

    @Test
    void contextLoads_Builder_pattern() {

        final Person person = Person.builder()
                .name("Dave")
                .surname("Developer")
                .town("Davetown")
                .build();

        final String name = person.getName();
        final String surname = person.getSurname();
        final String town = person.getTown();

        LOG.info("Person data - Name: {}, surname: {}, town: {}", name, surname, town);
        Assert.hasText(name, "Dave");
        Assert.hasText(surname, "Developer");
        Assert.hasText(town, "Davetown");
    }
}

已通过测试:2

console:

...JavaElevenStarterApplicationTests: Person data - Name: Dave, surname: Developer, town: Davetown

...JavaElevenStarterApplicationTests: Person data - Name: Dave, surname: Developer, town: Davetown

这让我假设某些依赖性导致了问题,并且 lombok 首先失败。

检查您的项目依赖项并尝试编译您的项目。

© www.soinside.com 2019 - 2024. All rights reserved.