前提・実現したいこと
IntelliJ(CE)を用いてSpringBoot + Kotlin + Doma2 + Gradle(KTS)でプロジェクトを作成しようとしております。
同様の構成でサンプルを作成している記事を見つけ、Dao一つ、Entity一つ、SQL一つの小さなコードを動かすことはできました。
その記事ではDoma2.29.0を使用していたため最新の2.48.0で動かそうとしていますが、
実装クラスの生成ができない状態です。
Domaのビルドの手順として
- Entityクラス及びDaoインターフェースを作成
resource\META-INF
以下にDaoクラスと同じ階層でsqlファイルを作成- sqlファイルを成果物へ含めるためのタスクを作成しbuild時に実行されるように設定
- Daoの実装生成のためにannotationProcessorを使用(kaptとorg.seasar.doma:doma-processor)
- gradle build
と認識していますが、不備や追加のステップが必要でしょうか?
また、3.のsqlファイルを成果物へ含めるためのタスクは以前はbuild.gradle
に直接記述していたのがdoma.compile
プラグインを使用することでスクリプト内での記述が不要になったということあっていますか?
発生している問題・エラーメッセージ
Doma公式のリポジトリに同様の構成が見当たらなかったため以下のサンプルを参考にbuild.gradle.ktsを作成しました。
kotlin-sample
spring-boot-jpetstore
buildタスク自体にエラーは出ていないようですが、testタスクの処理時に以下のエラーが出てテストに失敗しています。
また2.29でビルドした際にDaobuild\generated\source\kapt\main
以下に生成されていたDaoの実装クラスなどが生成されていません。
エラーもこれが原因と見ています。
DomademoApplicationTests > contextLoads() FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:132 Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException at AutowiredAnnotationBeanPostProcessor.java:660 Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException at DefaultListableBeanFactory.java:1790
該当のソースコード
Spring Initializrで生成されたものをベースに「Doma用追加」でコメントアウトされている部分がDoma2.29用に追加した記述で、こちらはBootRunで動作するところまで確認できています。
「Doma2.48用追加」のあとに続いている部分が2.48用に追加した部分です。
kotlin
1import org.jetbrains.kotlin.gradle.tasks.KotlinCompile 2 3plugins { 4 id("org.springframework.boot") version "2.5.4" 5 id("io.spring.dependency-management") version "1.0.11.RELEASE" 6 kotlin("jvm") version "1.5.21" 7 kotlin("plugin.spring") version "1.5.21" 8 //Doma用追加 9// id("org.jetbrains.kotlin.kapt") version "1.2.71" 10 11//Doma2.48用追加 12 kotlin("kapt") version "1.5.30" 13 id("org.seasar.doma.compile") version "1.1.0" 14 15} 16 17group = "com.example" 18version = "0.0.1-SNAPSHOT" 19java.sourceCompatibility = JavaVersion.VERSION_11 20 21//Doma用追加 22//configurations { 23// compileOnly { 24// extendsFrom(configurations.annotationProcessor.get()) 25// } 26//} 27 28repositories { 29 mavenCentral() 30 //Doma用追加 31 maven("https://oss.sonatype.org/content/repositories/snapshots/") 32 maven(url = "https://repo.spring.io/milestone") 33} 34 35dependencies { 36 implementation("org.springframework.boot:spring-boot-starter-web") 37 implementation("com.fasterxml.jackson.module:jackson-module-kotlin") 38 implementation("org.jetbrains.kotlin:kotlin-reflect") 39 implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") 40 runtimeOnly("com.h2database:h2") 41 testImplementation("org.springframework.boot:spring-boot-starter-test") 42 43 //Doma用追加 44// implementation("org.seasar.doma.boot:doma-spring-boot-starter:1.5.0") 45// kapt("org.seasar.doma:doma:2.29.0") 46// implementation("org.seasar.doma:doma:2.29.0") 47 48//Doma2.48用追加 49 val domaVersion: String by project 50 val domaSpringBootVersion: String by project 51 annotationProcessor("org.seasar.doma:doma-processor:${domaVersion}") 52 implementation("org.seasar.doma:doma-core:${domaVersion}") 53 implementation("org.seasar.doma.boot:doma-spring-boot-starter:${domaSpringBootVersion}") 54} 55 56 57 58//Doma用追加 59//val compileKotlin: KotlinCompile by tasks 60// 61//kapt { 62// arguments { 63// arg("doma.resources.dir", compileKotlin.destinationDirectory.get()) 64// } 65//} 66// 67//tasks.register("copyDomaResources",Sync::class){ 68// from("src/main/resources") 69// into(compileKotlin.destinationDirectory.get()) 70// include("doma.compile.config") 71// include("META-INF/**/*.sql") 72// include("META-INF/**/*.script") 73//} 74 75 76tasks.withType<KotlinCompile> { 77//Doma用追加 78// dependsOn(tasks.getByName("copyDomaResources")) 79 kotlinOptions { 80 freeCompilerArgs = listOf("-Xjsr305=strict") 81 jvmTarget = "11" 82 } 83} 84 85tasks.withType<Test> { 86 useJUnitPlatform() 87}
補足情報(FW/ツールのバージョンなど)
- Intellij(CE)
- JVM:11
- Spring:2.5.4
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/15 14:40