👋
【Springboot】 ./gradlew mbGenerator でハマった(Gradleバージョン修正)
はじめに
- SpringBoot
- Kotlin
- MySql
- MyBatis
を利用して MyBatis Generator
でコード生成をしようとしたところエラーにハマりました。
そのときの解決方法の備忘録。
環境
一応各ツールのバージョンなどがわかるようにbuild.gradle.kts
のコードを記載しておきます。
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("org.springframework.boot") version "2.5.0"
id("io.spring.dependency-management") version "1.0.11.RELEASE"
id("com.arenagod.gradle.MybatisGenerator") version "1.4"
kotlin("jvm") version "1.5.10"
kotlin("plugin.spring") version "1.5.10"
}
group = "パッケージ名"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_11
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
implementation("org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0")
implementation("org.mybatis.dynamic-sql:mybatis-dynamic-sql:1.2.1")
implementation("mysql:mysql-connector-java:8.0.23")
mybatisGenerator("org.mybatis.generator:mybatis-generator-core:1.4.0")
testImplementation("org.springframework.boot:spring-boot-starter-test")
}
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict")
jvmTarget = "11"
}
}
tasks.withType<Test> {
useJUnitPlatform()
}
mybatisGenerator {
verbose = true
configFile = "${projectDir}/src/main/resources/generatorConfig.xml"
}
エラー内容
MyBatis Generator
でコード生成しようとプロジェクトのディレクトリでコマンドを実行。
$ ./gradlew mbGenerator
エラー文
> Task :mbGenerator FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Some problems were found with the configuration of task ':mbGenerator' (type 'MybatisGeneratorTask').
- Type 'com.arenagod.gradle.MybatisGeneratorTask' property 'configFile' is missing an input or output annotation.
Reason: A property without annotation isn't considered during up-to-date checking.
Possible solutions:
1. Add an input or output annotation.
2. Mark it as @Internal.
Please refer to https://docs.gradle.org/7.0.2/userguide/validation_problems.html#missing_annotation for more details about this problem.
〜 以下一部異なるがほぼ同様のエラー内容が続く 〜
エラーの内容とすると
- mbGenerator の構成に問題が見つかった
- 'com.arenagod.gradle.MibatisGeneratorTask' のプロパティ 'configFile' に入力または出力のアノテーションがない。
などと言われているようだった。
そのためMyBatis
のバージョンや、コード生成設定ファイルsrc/main/resources/generatorConfig.xml
に問題があると考えて、調べたり、バージョンを修正したり試みたものの一向に解決しなかった。
解決策
結論とするとGradle
のバージョンを7.0.2
→6.9
に落とすことで解決した。
どうやらGradle
はプロジェクト名/gradle/wrapper/gradle-wrapper.properties
でバージョンを制御しているようだったので
- distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
+ distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-bin.zip
と修正することで無事に./gradlew mbGenerator
でコード生成できました!!
最後に
他の解決方法もあるかもしれませんが、
こちらの記事を参考にMyBatis
ではなくGradle
の方に問題があるのではないかとあたりをつけることができました。
ありがとうございました。
調べてみるとどうやらGradle
バージョン7以上で他のツールとの依存関係なのか色々と問題に遭遇する??ようでした。
Discussion
https://github.com/kimichen13/mybatis-generator-plugin こちらのプラグインだと 7.0 でもうまくいったりしませんでしょうか? (こちらのほうが新しくてメンテナンスされているように見えるので)