【Springboot】 ./gradlew mbGenerator でハマった(Gradleバージョン)

3 min read読了の目安(約3100字

はじめに

  • 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.26.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の方に問題があるのではないかとあたりをつけることができました。
ありがとうございました。

https://www.gitmemory.com/issue/dorongold/gradle-task-tree/43/821318500

調べてみるとどうやらGradleバージョン7以上で他のツールとの依存関係なのか色々と問題に遭遇する??ようでした。