Lombok 不生成 getter 和 setter 或构造函数,甚至 Spring Boot 项目中的 @Data 的问题

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

我使用 Spring Boot 来初始化我的项目,事实上,我通过 Spring Boot 包含了 Lombok 依赖项并配置了 Lombok 插件,如下所示:

我使用的IDE是Eclipse

<?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.2.0-SNAPSHOT</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    
    <groupId>com.springbootExample</groupId>
    <artifactId>SpringBoot_Example</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>SpringBoot_Example</name>
    <description>Demo project for Spring Boot</description>
    
    <properties>
        <java.version>17</java.version>
    </properties>
    
    <dependencies>
        
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-devtools</artifactId>
          <scope>runtime</scope>
          <optional>true</optional>
        </dependency>
        
        <dependency>
          <groupId>com.h2database</groupId>
          <artifactId>h2</artifactId>
          <scope>runtime</scope>
        </dependency>
        
        <!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc -->
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <version>12.4.2.jre11</version>
        </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>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <excludes>
            <exclude>
              <groupId>org.projectlombok</groupId>
              <artifactId>lombok</artifactId>
            </exclude>
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </build>
  
  <repositories>
      
    <repository>
      <id>spring-milestones</id>
      <name>Spring Milestones</name>
      <url>https://repo.spring.io/milestone</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
    
    <repository>
      <id>spring-snapshots</id>
      <name>Spring Snapshots</name>
      <url>https://repo.spring.io/snapshot</url>
      <releases>
        <enabled>false</enabled>
      </releases>
    </repository>
    
  </repositories>
  
  <pluginRepositories>
      
    <pluginRepository>
      <id>spring-milestones</id>
      <name>Spring Milestones</name>
      <url>https://repo.spring.io/milestone</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </pluginRepository>
    
    <pluginRepository>
      <id>spring-snapshots</id>
      <name>Spring Snapshots</name>
      <url>https://repo.spring.io/snapshot</url>
      <releases>
        <enabled>false</enabled>
      </releases>
    </pluginRepository>
    
  </pluginRepositories>

</project>

但是,当我在名为department.java的实体类中使用它时,Lombok似乎没有按预期工作。即使使用 @Data、@NoArgsConstructor、@AllArgsConstructor 和 @Builder 对类进行注释后,问题仍然存在。

package com.springbootExample.SpringBoot_Example.entity;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class department {
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long departmentID;
    
    @NotBlank(message = "Please add department name")
//  @Length(max = 20, min = 10)
//  @Size
//  @Email
//  @Positive
//  @Negative
//  @PositiveOrZero
//  @Future
//  @Past
//  @FutureOrPresent
    private String departmentName;
    private String departmentAdress;
    private String departmentCode;
}

在另一个配置Java类中,我也无法使用部门类的getter和setter方法。

package com.springbootExample.SpringBoot_Example.service;

import java.util.List;
import java.util.Objects;
import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.springbootExample.SpringBoot_Example.entity.department;
import com.springbootExample.SpringBoot_Example.error.departmentExceptionHandling;
import com.springbootExample.SpringBoot_Example.repository.departmentRepository;

@Service
public class departmentServiceImplement implements departmentService{
    
    @Autowired
    private departmentRepository dr;

    @Override
    public department saveDepartment(department dp) {
        return dr.save(dp);
    }

    @Override
    public List<department> fetchDepartment() {
        return dr.findAll();
    }

    @Override
    public department fetchDepartmentById(Long departmentID) throws departmentExceptionHandling {
        Optional<department> dpt = dr.findById(departmentID);
        
        if(!dpt.isPresent()) {
            throw new departmentExceptionHandling("Department was not found");
        }
        return dpt.get();
    }

    @Override
    public void deleteDepartmentById(Long departmentID) {
        dr.deleteById(departmentID);
        
    }

    @Override
    public department updateDepartment(Long departmentID, department dp) {
        department dep = dr.findById(departmentID).get();
        
        if(Objects.nonNull(dp.getDepartmentName()) && !"".equalsIgnoreCase(dp.getDepartmentName())) {
            dep.setDepartmentName(dp.getDepartmentName());
        }
        
        if(Objects.nonNull(dp.getDepartmentCode()) && !"".equalsIgnoreCase(dp.getDepartmentCode())) {
            dep.setDepartmentCode(dp.getDepartmentCode());
        }
        
        if(Objects.nonNull(dp.getDepartmentAdress()) && !"".equalsIgnoreCase(dp.getDepartmentAdress())) {
            dep.setDepartmentAdress(dp.getDepartmentAdress());
        }
        
        return dr.save(dep);
    }

    @Override
    public department fetchDepartmentByName(String departmentName) {
        return departmentRepository.findByDepartmentNameIgnoreCase(departmentName);
    } 

}

错误显示为

The method getDepartmentName() is undefined for the type department
The method getDepartmentCode() is undefined for the type department
The method getDepartmentAdress() is undefined for the type department

我尝试了多种解决方案,例如更新 IDE、更改 Lombok 插件、安装 Lombok,但都没有解决问题。

如果有人遇到类似的问题并且知道如何解决它,我将非常感谢您的帮助。

提前谢谢您。

java spring spring-boot lombok
1个回答
0
投票

这些注释将在编译之前执行。在 Gradle 中,您需要使用 annotationProcessor <lombok> 来实现此目的。您添加的是默认范围,可能是

runtime
compile
(不确定)。
对于 Maven,您必须使用 

annotationProcessor

的等效项,

here
(在问题本身中)对此进行了解释。

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