web-dev-qa-db-ja.com

gradleとspring-bootで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を含めました。ロンボクを使用してコードをコンパイルし、ロンボクによって生成されたメソッドの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?

しかし、セッターとゲッターを手動で含めると、これは正常に機能します。何が起こっているのか、どのように修正するのかわかりません。何か案が?

15
Lucas

最新の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. _spring-boot-starter-test_“スターター” JUnitを含む であるため、testCompile("junit:junit")は不要です。
  2. implementationの代わりにapiまたはcompile構成を使用します( Gradle 3.4 )。 正しいものを選択するにはどうすればよいですか?
  3. compiledevtools構成を使用しないでください。 開発ツール ガイドのヒント:

    Mavenで依存関係にオプションとしてフラグを立てるか、GradleでカスタムdevelopmentOnly構成を使用する(上記を参照)ことは、プロジェクトを使用する他のモジュールにdevtoolsが一時的に適用されるのを防ぐベストプラクティスです。

  4. IntelliJ IDEAを使用する場合は、 Lombokプラグイン がインストールされ、 注釈処理 が有効になっていることを確認してください。新規プロジェクトの初期プロジェクトのセットアップを簡単にするために、Lombokプラグインを 必須 として指定することもできます。

19
naXa

しばらくこれに苦労した後、私はこのプラグインがトリックを行うことがわかった:

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"
}

私は以前にこのプラグインに出くわしましたが、何か間違ったことをしましたが、うまくいきませんでした。私はそれが今働いてうれしいです。

ありがとう!

14
Lucas