LoginSignup
1
0

Gradle7.5.1 で Java17+SpringBoot3.2.2+QueryDSL5.1+Hibernate6+lombok を動作させるための build.gradle の記述

Last updated at Posted at 2024-03-01

世界の web に載っている情報が断片的で、すべてを網羅する設定をするにはどう書けばいいかにたどり着くのに何日もかかって何度も心が折れそうになったのでここに書き残します...同じことで困っているどなたかのお役に立てば幸いです。

流行りの組み合わせなので次以降に参画するプロジェクトでも役に立つかもしれず、未来の自分のためにも差しさわりのない汎用的な部分だけ書き出しておくとします。

gradle build.gradle

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.2.2'
}

apply plugin: 'maven-publish'
apply plugin: 'io.spring.dependency-management'

sourceCompatibility = '17'

publishing {
   publications {
        maven(MavenPublication) {
            groupId = '[任意]'
            artifactId = '[任意]'
            version = '[任意]'
            from components.java
        }
    }
}

repositories {
    mavenCentral()
    maven { url 'https://repo.spring.io/release' }
    maven { url 'https://repo.spring.io/milestone' }
    maven { url 'https://repo.spring.io/snapshot' }
}

ext {
    // QueryDSL が自動生成したクラスの格納場所
    javaGeneratedSources = file("$projectDir/src/main/generated")
}

dependencies {
    // スターター(関連するclasspathを自動設定)
    implementation('org.springframework.boot:spring-boot-starter-data-jpa')

    // Spring 関連
    implementation('org.springframework.data:spring-data-commons')
    implementation('org.springframework.data:spring-data-jpa')

    ///////////////////////////////////////////////////////////////////////
    // hibernate (DB セクセスの仲介をする。
    // EntityManager との連携に必須
    implementation('io.hypersistence:hypersistence-utils-hibernate-60:3.7.3')
    implementation('org.hibernate.orm:hibernate-core')

    // lobmok
    // @Log や @Data (getter/setter) をサポートしてくれるライブラリ。
    implementation     ('org.projectlombok:lombok')
    annotationProcessor('org.projectlombok:lombok')

    // Entity (永続化) 周りの API。
    // EntityManager や @Entity, @Table @Column @PersistenceContext などサポートしている。
    implementation     ('jakarta.persistence:jakarta.persistence-api')
    annotationProcessor('jakarta.persistence:jakarta.persistence-api')

    // QueryDSL
    // SQL を自動生成するのをサポートするライブラリ。@JpaQuery など。
    // 内部が EE8(javax) パッケージで動作する仕様になっているため、classifier として 
    // jakarta を指定しすることで EE9(jakarta) でアクセスできるようになる。
    implementation('com.querydsl:querydsl-core:5.1.0')
    annotationProcessor('com.querydsl:querydsl-apt:5.1.0:jakarta')
    annotationProcessor('jakarta.annotation:jakarta.annotation-api')

    // これも必要 java のクラスを xml で処理可能にするライブラリ
    // Hibernate/DSL 周りで使用される
    implementation('org.glassfish.jaxb:jaxb-runtime:4.0.4')
    ///////////////////////////////////////////////////////////////////////

}

compileJava {

    // 初期化
    doFirst {
        delete javaGeneratedSources
        javaGeneratedSources.mkdirs()
    }

    // annotationProcessor へのクラスパスを追加
    classpath += configurations.annotationProcessor

    options.compilerArgs += [
            '-parameters', '-s', javaGeneratedSources
    ]
    options.compilerArgs += [
            '-processor', 'com.querydsl.apt.jpa.JPAAnnotationProcessor,lombok.launch.AnnotationProcessorHider$AnnotationProcessor'
    ]
}

clean {
    doFirst {
        delete javaGeneratedSources
    }
}

sourceSets {
    main {
        java {
            srcDir 'src/main/generated'
        }
    }
}

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0