java - 将 lombok 与 gradle 和 spring-boot 一起使用

标签 java spring-boot gradle lombok

我正在尝试使用 lombok 构建一个项目,这就是我所拥有的依赖项。

dependencies {
   compile("org.springframework.boot:spring-boot-starter-thymeleaf")
   compile("org.springframework.social:spring-social-facebook")
   compile("org.springframework.social:spring-social-twitter")
   testCompile("org.springframework.boot:spring-boot-starter-test")
   testCompile("junit:junit")
   compile("org.springframework.boot:spring-boot-devtools")
   compile("org.springframework.boot:spring-boot-starter-data-jpa")
   compile("mysql:mysql-connector-java")
   compileOnly("org.projectlombok:lombok:1.16.10")
}

我能够包含注释,并且我在编辑器中包含了 lombok。我什至能够使用 lombok 编译代码并对 lombok 生成的方法进行调用。

这是我的实体:

@Data
@Entity
@Table(name = "TEA_USER", uniqueConstraints = {
    @UniqueConstraint(columnNames = { "USR_EMAIL" }),
    @UniqueConstraint(columnNames = { "USR_NAME" })
})
public class User {


   @NotNull
   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   @Column(name="USR_ID")
   private long id;

   @NotNull
   @Column(name="USR_FNAME")
   private String firstName;

   @NotNull
   @Column(name="USR_LNAME")
   private String lastName;


   @NotNull
   @Min(5)
   @Max(30)
   @Column(name="USR_NAME")
   private String username;

   @Column(name="USR_EMAIL")
   private String email;

   @Min(8)
   @NotNull
   @Column(name="USR_PASSWORD")
   private String password;
}

这是一个编译良好的函数:

@PostMapping("/registration/register")
public String doRegister (@ModelAttribute @Valid User user, BindingResult result){
    user.getEmail();
    System.out.println(user.getFirstName());
    if (result.hasErrors()) {
         return "register/customRegister";
    }
    this.userRepository.save(user);
    return "register/customRegistered";
}

但是当我运行 bootRun 并尝试访问功能时,这是我得到的异常:

org.springframework.beans.NotReadablePropertyException: Invalid property 'firstName' of bean class [com.lucasfrossard.entities.User]: Bean property 'firstName' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?

但是,如果我手动包含 setter 和 getter,则效果很好。我不知道发生了什么以及如何解决它。有什么想法吗?

最佳答案

使用最新的 Lombok 1.18 很简单。 io.franzbecker.gradle-lombok 插件不是必需的。我的项目中的示例依赖项:

dependencies {
    implementation "org.springframework.boot:spring-boot-starter-thymeleaf"
    implementation "org.springframework.social:spring-social-facebook"
    implementation "org.springframework.social:spring-social-twitter"
    implementation "org.springframework.boot:spring-boot-starter-data-jpa"

    testImplementation "org.springframework.boot:spring-boot-starter-test"

    runtimeClasspath "org.springframework.boot:spring-boot-devtools"
    runtime "mysql:mysql-connector-java"

    // https://projectlombok.org
    compileOnly 'org.projectlombok:lombok:1.18.4'
    annotationProcessor 'org.projectlombok:lombok:1.18.4'
}

其他建议:

  1. testCompile("junit:junit") 不是必需的,因为 spring-boot-starter-test “Starter” contains JUnit .
  2. 使用implementationapi 配置而不是compile(自Gradle 3.4 起)。 How do I choose the right one?
  3. 不要为 devtools 使用compile 配置。来自 Developer Tools 的提示指南:

    Flagging the dependency as optional in Maven or using a custom developmentOnly configuration in Gradle (as shown above) is a best practice that prevents devtools from being transitively applied to other modules that use your project.

  4. 如果您使用 IntelliJ IDEA,请确保您有 Lombok plugin安装和 Annotation Processing启用。为了使新手更容易初始项目设置,您还可以将 Lombok 插件指​​定为 required .

关于java - 将 lombok 与 gradle 和 spring-boot 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40475910/

相关文章:

java - 第一个元素的空指针异常添加到我的通用 block 列表

java - 使用 GWT 将 Java 编译为 Javascript 库

spring - 使用 Angular2 将 MultipartFile 作为请求参数发送到 REST 服务器

java - wsdl 到 java 类

gradle - Gradle-排除配置的依赖项,但不继承配置

java - 现有路径上的 NullPointerException

java - 在 Android 中,如何有效地找到方法的调用者

oracle - 我可以在没有 Oracle JDBC 驱动程序的情况下连接到 Oracle 数据库吗?

java - org.o7planning.aboutcompany.MainController 中的字段 dataSource 需要类型为 'javax.sql.DataSource' 的 bean,但无法找到

gradle - 删除任务始终保持最新