Spring Boot 2.3.x の Web アプリを 2.4.x へバージョンアップする ( その11 )( exclude junit-vintage-engine の記述を削除する+domaGen タスクで SQL ファイルが作成されない問題を解消する )
概要
記事一覧はこちらです。
感想 まで書きましたが、修正が必要な点を見つけたので反映します。
参照したサイト・書籍
目次
- build.gradle から
exclude group: "org.junit.vintage", module: "junit-vintage-engine"
を削除する - domaGen タスクを実行した時に SQL ファイルを作成しない問題を解消する
手順
build.gradle から exclude group: "org.junit.vintage", module: "junit-vintage-engine"
を削除する
JUnit 5’s Vintage Engine Removed from spring-boot-starter-test の記述があったのに build.gradle から不要な記述を削除するのを忘れていました。
build.gradle の testImplementation("org.springframework.boot:spring-boot-starter-test")
に記述していた { exclude group: "org.junit.vintage", module: "junit-vintage-engine" }
を削除します。
dependencies { .......... implementation("io.micrometer:micrometer-registry-prometheus") testImplementation("org.springframework.boot:spring-boot-starter-test") testImplementation("org.springframework.security:spring-security-test") .......... }
domaGen タスクを実行した時に SQL ファイルを作成しない問題を解消する
新規テーブルを作成して domaGen タスクを実行したところ SQL ファイルを生成しないことに気づきました。domaCodeGenDbSql タスクを実行していないことが原因だったので追加します。
// beforeDomaCodeGen --> domaCodeGenDbEntity --> domaCodeGenDbDao --> domaCodeGenDbSql --> domaGen --> afterDomaCodeGen
domaCodeGenDbEntity.dependsOn beforeDomaCodeGen
domaCodeGenDbDao.dependsOn domaCodeGenDbEntity
domaCodeGenDbSql.dependsOn domaCodeGenDbDao
domaGen.dependsOn domaCodeGenDbSql
domaGen.finalizedBy afterDomaCodeGen
domaCodeGenDbSql.dependsOn domaCodeGenDbDao
を追加します。domaGen.dependsOn domaCodeGenDbDao
→domaGen.dependsOn domaCodeGenDbSql
に変更します。
domaGen タスクの全体は以下のようになりました。
// for doma-codegen-plugin // まず変更が必要なもの def rootPackageName = "ksbysample.webapp.lending" def rootPackagePath = "src/main/java/ksbysample/webapp/lending" def dbUrl = "jdbc:postgresql://localhost/ksbylending" def dbUser = "ksbylending_user" def dbPassword = "xxxxxxxx" def dbTableNamePattern = ".*" // おそらく変更不要なもの def packageEntityPath = rootPackagePath + "/entity" def packageDaoPath = rootPackagePath + "/dao" def importOfComponentAndAutowiredDomaConfig = "${rootPackageName}.util.doma.ComponentAndAutowiredDomaConfig" def workPath = "work" def workEntityPath = "${workPath}/entity" def workDaoPath = "${workPath}/dao" task domaGen(group: "doma code generation") { // このタスク自体は何もしない。実行する時の起点用タスクとして作成している。 } task beforeDomaCodeGen { doLast { // 作業用ディレクトリを削除する delete "${workPath}" // 現在の dao, entity パッケージのバックアップを取得する copy() { from "${packageDaoPath}" into "${workDaoPath}/org" } copy() { from "${packageEntityPath}" into "${workEntityPath}/org" } // dao, entity パッケージを削除する delete "${packageDaoPath}" delete "${packageEntityPath}" } } domaCodeGen { db { url = "${dbUrl}" user = "${dbUser}" password = "${dbPassword}" tableNamePattern = "${dbTableNamePattern}" ignoredTableNamePattern = "flyway_schema_history|SPRING_SESSION.*" entity { packageName = "${rootPackageName}.entity" useListener = false useMappedSuperclass = false } dao { packageName = "${rootPackageName}.dao" } } } task afterDomaCodeGen { doLast { // 生成された Entity クラスを作業用ディレクトリにコピーし、 // @SuppressWarnings({"PMD.TooManyFields"}) アノテーションを付加する copy() { from "${packageEntityPath}" into "${workEntityPath}/replace" filter { line -> line.replaceAll('@Entity', '@SuppressWarnings({"PMD.TooManyFields"})\n@Entity') } } // 生成された Dao インターフェースからバックアップにあるクラスを削除する // ※生成済の Dao インターフェースを再生成したい場合には事前に削除すること! for (workDaoFile in new File("${workDaoPath}/org").listFiles()) { def packageDaoFile = new File("${packageDaoPath}/${workDaoFile.name}") if (packageDaoFile.exists()) { packageDaoFile.delete() } } // 生成された Dao インターフェースを作業用ディレクトリにコピーし、 // @ComponentAndAutowiredDomaConfig アノテーションを付加し、 // Javadoc の @param に説明文を追加する copy() { from "${packageDaoPath}" into "${workDaoPath}/replace" filter { line -> line.replaceAll('import org.seasar.doma.Dao;', "import ${importOfComponentAndAutowiredDomaConfig};\nimport org.seasar.doma.Dao;") .replaceAll('@Dao', '@Dao\n@ComponentAndAutowiredDomaConfig') .replaceAll('@param (\\S+)$', '@param $1 $1') } } // 元々 dao, entity パッケージ内にあったファイルを元に戻す copy() { from "${workDaoPath}/org" into "${packageDaoPath}" } copy() { from "${workEntityPath}/org" into "${packageEntityPath}" } // @ComponentAndAutowiredDomaConfig アノテーションを付加した Dao インターフェースを // dao パッケージへ戻す copy() { from "${workDaoPath}/replace" into "${packageDaoPath}" } // @SuppressWarnings({"PMD.TooManyFields"}) アノテーションを付加した Entity クラスを // entity パッケージへ戻す copy() { from "${workEntityPath}/replace" into "${packageEntityPath}" } // 作業用ディレクトリを削除する delete "${workPath}" } } // beforeDomaCodeGen --> domaCodeGenDbEntity --> domaCodeGenDbDao --> domaCodeGenDbSql --> domaGen --> afterDomaCodeGen domaCodeGenDbEntity.dependsOn beforeDomaCodeGen domaCodeGenDbDao.dependsOn domaCodeGenDbEntity domaCodeGenDbSql.dependsOn domaCodeGenDbDao domaGen.dependsOn domaCodeGenDbSql domaGen.finalizedBy afterDomaCodeGen
履歴
2021/04/13
初版発行。