世界の 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'
}
}
}