当前位置: 首页 > 知识库问答 >
问题:

使用带有gradle和Spring靴的lombok

叶富
2023-03-14

我试图与龙目岛建立一个项目,这是我所依赖的。

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生成的方法进行cal。

这是我的实体:

@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,这就可以了。我不知道发生了什么,也不知道如何修复它。有什么想法吗?

共有3个答案

林礼骞
2023-03-14

如果您使用的是Eclipse或它的一个分支(我使用的是Spring工具套件4.5.1.RELEASE,相同的步骤适用于其他版本),那么您需要做的就是:

>

  • build.gradle

    dependencies {
      compileOnly 'org.projectlombok:lombok'  
      annotationProcessor 'org.projectlombok:lombok'
    }
    

    然后,右键单击您的项目

    右键单击lombok-“版本”。jar

    一个GUI将出现,按照所有的说明操作,它所做的一件事就是复制lombok。jar到IDE的根文件夹。

    1年后,使用4.11.1。RELEASE,我仍然指回我写的安装Lombok。

  • 柴彬
    2023-03-14

    经过一段时间的努力,我发现这个插件可以做到:

    https://github.com/franzbecker/gradle-lombok

    我的gradle文件如下所示:

    buildscript {
        repositories {
            maven { url "https://repo.spring.io/libs-milestone" }
            maven { url "https://plugins.gradle.org/m2/" }
        }
        dependencies {
            classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.0.RELEASE")
            classpath 'org.springframework:springloaded:1.2.6.RELEASE'
        }
    }
    
    plugins {
        id 'io.franzbecker.gradle-lombok' version '1.8'
        id 'java'
    }
    
    
    
    apply plugin: 'java'
    apply plugin: 'eclipse'
    apply plugin: 'idea'
    apply plugin: 'spring-boot'
    
    
    
    jar {
        baseName = 'gs-accessing-facebook'
        version =  '0.1.0'
    }
    
    repositories {
        mavenCentral()
        maven { url "https://repo.spring.io/libs-milestone" }
    }
    
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    
    dependencies {
        // compile("org.projectlombok:lombok:1.16.10")
        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")
    }
    
    idea {
        module {
            inheritOutputDirs = false
            outputDir = file("$buildDir/classes/main/")
        }
    }
    
    bootRun {
        addResources = true
        jvmArgs "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005"
    }
    

    我以前遇到过这个插件,但我做错了什么,它不起作用。我很高兴它现在起作用了。

    谢谢

    孟昊空
    2023-03-14

    最新的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'
    }
    

    其他建议:

    >

  • testCompile(“junit:junit”)不是必需的,因为springbootstarter测试“starter”包含junit
  • 使用实现api配置,而不是编译(从Gradle 3.4开始)。我如何选择正确的一个
  • 不要对devtools使用compile配置。《开发人员工具指南》中的提示:

    在Maven中将依赖项标记为可选,或者在Gradle中使用自定义的developmentOnly配置(如上所示),这是一种最佳做法,可以防止devtools被过渡地应用于使用您的项目的其他模块。

    如果您使用IntelliJ IDEA,请确保已安装Lombok插件并启用注释处理。为了让新手更容易进行初始项目设置,您还可以根据需要指定Lombok插件。

  •  类似资料:
    • 任何人都可以向我展示或指出一个不使用Spring引导 gradle 插件的Spring引导 gradle 项目。 我正在寻找一个类似springbootstarterwebhelloworld的例子,它不使用gradle插件。 我无法想象插件是一个需求,但搜索示例似乎都依赖于gradle插件,这在我的环境中不是一个选项,不,我也不能切换到maven。 理想情况下,gradle构建将通过添加以下内容

    • 从阅读Spring Boot参考文档可以看出,将Jersey资源注册为@Components似乎是一个要求。但事实似乎并非如此。在我看来,这似乎是Spring Boot参考文档中的一个小bug。文档可以从“Registered endpoints should be@components”更新为“Registered endpoints can be@components”。这有道理吗?

    • 我有两个项目。我用Angular2 cli构建的Angular2应用程序和只为Angular2应用程序服务的Spring Boot应用程序。我用构建Angular2应用程序,它会生成一个文件夹。然后,我将文件夹的内容放在Spring Boot应用程序的中。 我的Spring启动应用程序有两个文件。 Spring Boot应用程序类: 及其应用。属性文件: 它工作得很好,但是如果我转到一个url并点

    • 我试图将我的java应用程序迁移到Spring Boot。目前,我正在运行带有Apache Tiles的Spring MVC 3.2。当我迁移到Spring Boot时,我的控制器仍然被称为好的,它们将视图传递给视图解析程序,但是当Tiles去拉JSP文件时,事情就分崩离析了。我得到的错误消息是: 有没有人成功地使用了带有Spring Boot的Apache Tiles?知道怎么做吗? 提前感谢您

    • 我是Spring Boot和MongoDb的新手。尝试使用Mongo存储库和Spring Boot的一些示例。但在浏览了一些文档后发现,Mongo模板是一个更好的选择。无法使用Mongo模板示例获得正确的Spring Boot。 > 有人能帮我举个同样的例子吗? 在尝试Mongo模板时,我们是否需要创建用户定义的存储库界面并扩展存储库或CRUD存储库?

    • 我正在使用jasypt spring boot starter:1.14和spring-boot-2.0.0。M2 如果application.properties在类路径(src/main/资源)中可用,它工作得非常好 即使应用程序运行正常,Spring boot也能正常工作。属性放在运行spring boot jar的文件夹中(默认情况下,它在当前文件夹中查找application.prope