Spring Boot 2.0.x の Web アプリを 2.1.x へバージョンアップする ( その3 )( build.gradle を変更する )
概要
記事一覧はこちらです。
Spring Boot 1.5.x の Web アプリを 2.0.x へバージョンアップする ( その3 )( build.gradle を変更する ) の続きです。
- 今回の手順で確認できるのは以下の内容です。
- build.gradle を変更します。
- Spring Initializr で 2.1.2 のプロジェクトを作成して、変更した方がよい点があれば反映します。
- Spring Boot のバージョンを 2.0.8 → 2.1.2 に変更します。
- ライブラリは最新バージョンにアップデートします。
- build.gradle を変更します。
参照したサイト・書籍
目次
- Spring Initializr で 2.1.2 のプロジェクトを作成する
- build.gradle を変更する
- Rebuild Project 実行時に出るエラーを修正する
- build タスク実行時に出るエラーを修正する
- メモ書き&次回は。。。
手順
Spring Initializr で 2.1.2 のプロジェクトを作成する
Spring Initializr で 2.1.2 のプロジェクトを作成して、生成された build.gradle を見て反映した方が良い点があるか確認します。
以下の build.gradle が作成されました。
buildscript { ext { springBootVersion = '2.1.2.RELEASE' } repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } } apply plugin: 'java' apply plugin: 'org.springframework.boot' apply plugin: 'io.spring.dependency-management' group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '1.8' repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-data-redis' implementation 'org.springframework.boot:spring-boot-starter-freemarker' implementation 'org.springframework.boot:spring-boot-starter-mail' implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.flywaydb:flyway-core' implementation 'org.springframework.retry:spring-retry' implementation 'org.springframework.session:spring-session-data-redis' runtimeOnly 'org.springframework.boot:spring-boot-devtools' runtimeOnly 'org.postgresql:postgresql' compileOnly 'org.springframework.boot:spring-boot-configuration-processor' compileOnly 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.security:spring-security-test' }
今回は反映した方が良さそうな点はありませんでした。
build.gradle を変更する
build.gradle を以下のように変更します。
buildscript { ext { group "ksbysample" version "2.1.2-RELEASE" } repositories { mavenCentral() maven { url "https://repo.spring.io/release/" } maven { url "https://plugins.gradle.org/m2/" } } } plugins { id "java" id "eclipse" id "idea" id "org.springframework.boot" version "2.1.2.RELEASE" id "io.spring.dependency-management" version "1.0.6.RELEASE" id "groovy" id "checkstyle" id "com.github.spotbugs" version "1.6.9" id "pmd" id "net.ltgt.errorprone" version "0.0.16" id "de.undercouch.download" version "3.4.3" id "com.gorylenko.gradle-git-properties" version "2.0.0" } sourceCompatibility = 1.8 targetCompatibility = 1.8 wrapper { gradleVersion = "5.2" distributionType = Wrapper.DistributionType.ALL } [compileJava, compileTestGroovy, compileTestJava]*.options*.encoding = "UTF-8" [compileJava, compileTestGroovy, compileTestJava]*.options*.compilerArgs = [ "-Xlint:all,-options,-processing,-path" , "-Xep:RemoveUnusedImports:WARN" , "-Xep:InsecureCryptoUsage:OFF" , "-Xep:ParameterName:OFF" ] // for Doma 2 // JavaクラスとSQLファイルの出力先ディレクトリを同じにする processResources.destinationDir = compileJava.destinationDir // コンパイルより前にSQLファイルを出力先ディレクトリにコピーするために依存関係を逆転する compileJava.dependsOn processResources springBoot { buildInfo() } idea { module { inheritOutputDirs = false outputDir = file("$buildDir/classes/main/") } } configurations { // annotationProcessor と testAnnotationProcessor、compileOnly と testCompileOnly を併記不要にする testAnnotationProcessor.extendsFrom annotationProcessor testImplementation.extendsFrom compileOnly // for Doma 2 domaGenRuntime } checkstyle { configFile = file("${rootProject.projectDir}/config/checkstyle/google_checks.xml") toolVersion = "8.17" sourceSets = [project.sourceSets.main] } spotbugs { toolVersion = "3.1.11" ignoreFailures = true effort = "max" spotbugsTest.enabled = false } tasks.withType(com.github.spotbugs.SpotBugsTask) { reports { xml.enabled = false html.enabled = true } } pmd { toolVersion = "6.11.0" sourceSets = [project.sourceSets.main] ignoreFailures = true consoleOutput = true ruleSetFiles = rootProject.files("/config/pmd/pmd-project-rulesets.xml") ruleSets = [] } pmdMain { def backupLoggerLevel doFirst { backupLoggerLevel = logger.context.level logger.context.level = LogLevel.QUIET } doLast { logger.context.level = backupLoggerLevel } } repositories { mavenCentral() } dependencyManagement { imports { // mavenBom は以下の URL のものを使用する // https://repo.spring.io/release/org/springframework/boot/spring-boot-starter-parent/2.0.7.RELEASE/ // bomProperty に指定可能な property は以下の URL の BOM に記述がある // https://repo.spring.io/release/org/springframework/boot/spring-boot-dependencies/2.0.7.RELEASE/spring-boot-dependencies-2.0.7.RELEASE.pom mavenBom(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES) { // Spring Boot の BOM に定義されているバージョンから変更する場合には、ここに以下のように記述する // bomProperty "thymeleaf.version", "3.0.9.RELEASE" } } } dependencies { def jdbcDriver = "org.postgresql:postgresql:42.2.5" def spockVersion = "1.2-groovy-2.5" def domaVersion = "2.23.0" def lombokVersion = "1.18.4" def errorproneVersion = "2.3.1" def powermockVersion = "2.0.0" def spotbugsVersion = "3.1.11" // dependency-management-plugin によりバージョン番号が自動で設定されるもの // Appendix F. Dependency versions ( https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-dependency-versions.html ) 参照 implementation("org.springframework.boot:spring-boot-starter-web") implementation("org.springframework.boot:spring-boot-starter-thymeleaf") implementation("org.thymeleaf.extras:thymeleaf-extras-springsecurity5") implementation("org.springframework.boot:spring-boot-starter-data-jpa") implementation("org.springframework.boot:spring-boot-starter-freemarker") implementation("org.springframework.boot:spring-boot-starter-mail") implementation("org.springframework.boot:spring-boot-starter-security") implementation("org.springframework.boot:spring-boot-starter-data-redis") implementation("org.springframework.boot:spring-boot-starter-amqp") implementation("org.springframework.boot:spring-boot-starter-actuator") runtimeOnly("org.springframework.boot:spring-boot-devtools") compileOnly("org.springframework.boot:spring-boot-configuration-processor") implementation("org.springframework.session:spring-session-data-redis") implementation("org.springframework.retry:spring-retry") implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-xml") implementation("org.apache.commons:commons-lang3") implementation("org.codehaus.janino:janino") implementation("io.micrometer:micrometer-registry-prometheus") testImplementation("org.springframework.boot:spring-boot-starter-test") testImplementation("org.springframework.security:spring-security-test") testImplementation("org.yaml:snakeyaml") // dependency-management-plugin によりバージョン番号が自動で設定されないもの、あるいは最新バージョンを指定したいもの runtimeOnly("${jdbcDriver}") implementation("com.integralblue:log4jdbc-spring-boot-starter:1.0.2") implementation("org.simpleframework:simple-xml:2.7.1") implementation("com.univocity:univocity-parsers:2.8.1") implementation("com.google.guava:guava:27.0.1-jre") implementation("org.flywaydb:flyway-core:5.2.4") implementation("com.zaxxer:HikariCP:3.3.0") testImplementation("org.dbunit:dbunit:2.6.0") testImplementation("com.icegreen:greenmail:1.5.9") testImplementation("org.assertj:assertj-core:3.11.1") testImplementation("com.jayway.jsonpath:json-path:2.4.0") testImplementation("org.jsoup:jsoup:1.11.3") testImplementation("cglib:cglib-nodep:3.2.10") testImplementation("org.spockframework:spock-core:${spockVersion}") testImplementation("org.spockframework:spock-spring:${spockVersion}") // for lombok // testAnnotationProcessor、testCompileOnly を併記しなくてよいよう configurations で設定している annotationProcessor("org.projectlombok:lombok:${lombokVersion}") compileOnly("org.projectlombok:lombok:${lombokVersion}") // for Doma annotationProcessor("org.seasar.doma:doma:${domaVersion}") implementation("org.seasar.doma:doma:${domaVersion}") domaGenRuntime("org.seasar.doma:doma-gen:${domaVersion}") domaGenRuntime("${jdbcDriver}") // for Error Prone ( http://errorprone.info/ ) errorprone("com.google.errorprone:error_prone_core:${errorproneVersion}") compileOnly("com.google.errorprone:error_prone_annotations:${errorproneVersion}") // PowerMock testImplementation("org.powermock:powermock-module-junit4:${powermockVersion}") testImplementation("org.powermock:powermock-api-mockito2:${powermockVersion}") // for SpotBugs compileOnly("com.github.spotbugs:spotbugs:${spotbugsVersion}") compileOnly("net.jcip:jcip-annotations:1.0") compileOnly("com.github.spotbugs:spotbugs-annotations:${spotbugsVersion}") testImplementation("com.google.code.findbugs:jsr305:3.0.2") }
- buildscript block の ext block 内で
version "2.0.8-RELEASE"
→version "2.1.2-RELEASE"
に変更します。 - plugins block の以下の点を変更します。
id "org.springframework.boot" version "2.0.8.RELEASE"
→id "org.springframework.boot" version "2.1.2.RELEASE"
id "com.github.spotbugs" version "1.6.8"
→id "com.github.spotbugs" version "1.6.9"
id "com.gorylenko.gradle-git-properties" version "2.0.0-beta1"
→id "com.gorylenko.gradle-git-properties" version "2.0.0"
- checkstyle block で
toolVersion = "8.16"
→toolVersion = "8.17"
に変更します。 - spotbugs で
toolVersion = "3.1.10"
→toolVersion = "3.1.11"
に変更します。 - pmd で
toolVersion = "6.10.0"
→toolVersion = "6.11.0"
に変更します。 - dependencyManagement block から
bomProperty "groovy.version", "2.5.4"
を削除します。 - dependencies block の以下の点を変更します。
def domaVersion = "2.21.0"
→def domaVersion = "2.23.0"
def spotbugsVersion = "3.1.10"
→def spotbugsVersion = "3.1.11"
implementation("com.univocity:univocity-parsers:2.7.6")
→implementation("com.univocity:univocity-parsers:2.8.1")
変更後、Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新すると、特にエラーは出ずに更新されました。
Rebuild Project 実行時に出るエラーを修正する
clean タスク実行 → Rebuild Project 実行 をするとエラーが出るので修正します。
java: org.springframework.boot.web.client.RestTemplateBuilderのsetConnectTimeout(int)は非推奨になりました/setReadTimeout(int)は非推奨になりました
エラーが出たのは src/main/java/ksbysample/webapp/lending/service/calilapi/CalilApiService.java の以下の箇所でした。
RestTemplateBuilder#setConnectTimeout, setReadTimeout の引数が int 型のメソッドは非推奨となり Duration 型で指定するメソッドに変わったためでした。Spring Boot 2.1 Release Notes - Deprecations in Spring Boot 2.1 に記述があります。引数に渡している定数 CONNECT_TIMEOUT、READ_TIMEOUT を int 型から Duration 型に変更します。
build タスク実行時に出るエラーを修正する
build タスク実行をするとエラーが出るので修正します。
エラー: BaseTestSqlは繰返し可能な注釈型ではありません/エラー: TestDataは繰返し可能な注釈型ではありません
こちらから先に対応します。エラーが出たのは src/test/java/ksbysample/webapp/lending/TestDataResourceTest.java の以下の箇所でした。
調べてみると、
- @Repeatable アノテーションが付いている他の繰返し可能な注釈型を見ましたが、違いがあるようには見えませんでした。
- demo プロジェクトに BaseTestSql、BaseTestSqlList のファイルをコピーしてテストクラスを作成して付与してみましたが、再現せず。
- そもそも動かないのではなくて compile が通らない。
gradlew build --stacktrace --debug
を実行してみると以下のログが出力されていました。
17:18:41.054 [INFO] [org.gradle.api.internal.tasks.compile.incremental.IncrementalCompilerDecorator] Full recompilation is required because no incremental change information is available. This is usually caused by clean builds or changing compiler arguments. 17:18:41.055 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Compile Java for :compileTestJava' started 17:18:41.062 [DEBUG] [org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler] Compiler arguments: -source 1.8 -target 1.8 -d D:\project-springboot\ksbysample-webapp-lending\build\classes\java\test -encoding UTF-8 -g -sourcepath -processorpath C:\Users\root\.gradle\caches\modules-2\files-2.1\org.projectlombok\lombok\1.18.4\7103ab519b1cdbb0642ad4eaf1db209d905d0f96\lombok-1.18.4.jar;C:\Users\root\.gradle\caches\modules-2\files-2.1\org.seasar.doma\doma\2.23.0\f5340b3f807100eaa28e725cf9ec891df6441a9c\doma-2.23.0.jar -s D:\project-springboot\ksbysample-webapp-lending\build\generated\sources\annotationProcessor\java\test -XDuseUnsharedTable=true -classpath D:\project-springboot\ksbysample-webapp-lending\build\classes\java\main;.....(長いので classpath は途中省略する).....C:\Users\root\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-api\2.11.1\268f0fe4df3eefe052b57c87ec48517d64fb2a10\log4j-api-2.11.1.jar -Xlint:all,-options,-processing,-path -Xep:RemoveUnusedImports:WARN -Xep:InsecureCryptoUsage:OFF -Xep:ParameterName:OFF D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\common\test\helper\SimpleRequestBuilder.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\common\test\helper\TestHelper.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\common\test\matcher\CustomModelResultMatchers.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\common\test\matcher\ErrorsResultMatchers.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\common\test\matcher\HtmlResultMatchers.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\common\test\rule\db\AssertOptions.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\common\test\rule\db\BaseTestData.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\common\test\rule\db\BaseTestSql.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\common\test\rule\db\BaseTestSqlList.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\common\test\rule\db\DbUnitUtils.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\common\test\rule\db\NoUseTestDataResource.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\common\test\rule\db\TableDataAssert.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\common\test\rule\db\TestData.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\common\test\rule\db\TestDataList.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\common\test\rule\db\TestDataLoader.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\common\test\rule\db\TestDataResource.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\common\test\rule\db\TestSql.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\common\test\rule\db\TestSqlExecutor.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\common\test\rule\db\TestSqlList.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\common\test\rule\mail\MailServerResource.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\common\test\rule\mockmvc\SecurityMockMvcResource.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\test\Item.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\test\ItemTypeStringToCodeConversion.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\test\StringToLocalDateTimeConversion.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\test\UniVocityParsersTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\helper\library\LibraryHelperTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\helper\mail\EmailHelperTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\helper\mail\Mail001HelperTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\helper\mail\Mail002HelperTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\helper\mail\Mail003HelperTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\helper\message\MessagesPropertiesHelperTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\helper\url\UrlAfterLoginHelperTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\helper\user\UserHelperTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\listener\rabbitmq\InquiringStatusOfBookQueueListenerTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\security\LendingUserDetailsHelperTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\security\LendingUserDetailsServiceTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\security\LendingUserDetailsTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\service\calilapi\CalilApiServiceTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\service\file\BooklistCsvFileServiceTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\service\queue\InquiringStatusOfBookQueueServiceTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\service\UserInfoServiceTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\TestDataResourceTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\values\validation\ValuesEnumValidatorTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\web\admin\library\AdminLibraryControllerTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\web\admin\library\AdminLibraryServiceTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\web\booklist\BooklistControllerTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\web\booklist\BooklistServiceTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\web\booklist\UploadBooklistFormValidatorTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\web\confirmresult\ConfirmresultControllerTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\web\ExceptionHandlerAdviceTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\web\lendingapp\LendingappControllerTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\web\lendingapp\LendingappFormValidatorTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\web\lendingapproval\LendingapprovalControllerTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\web\lendingapproval\LendingapprovalFormValidatorTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\web\LoginControllerTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\web\WebappErrorControllerTest.java D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\webapi\library\LibraryControllerTest.java 17:18:41.063 [INFO] [net.ltgt.gradle.errorprone.ErrorProneCompiler] Compiling with error-prone compiler 17:18:41.064 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Resolve files of :errorprone' started 17:18:41.064 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Resolve files of :errorprone' 17:18:41.064 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Resolve files of :errorprone' completed 17:18:44.293 [ERROR] [system.err] C:\Users\root\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-test\2.1.2.RELEASE\89b227adbba0d6e9b85a2fde9119ef00428a45e3\spring-boot-test-2.1.2.RELEASE.jar(/org/springframework/boot/test/context/SpringBootTest.class): 警告:タイプ'ExtendWith'内に注釈メソッド'value()'が見つかりません: org.junit.jupiter.api.extension.ExtendWithのクラス・ファイルが見つかりません 17:18:44.493 [ERROR] [system.err] C:\Users\root\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-test\2.1.2.RELEASE\89b227adbba0d6e9b85a2fde9119ef00428a45e3\spring-boot-test-2.1.2.RELEASE.jar(/org/springframework/boot/test/context/SpringBootTest.class): 警告:タイプ'ExtendWith'内に注釈メソッド'value()'が見つかりません: org.junit.jupiter.api.extension.ExtendWithのクラス・ファイルが見つかりません 17:18:44.495 [ERROR] [system.err] D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\TestDataResourceTest.java:24: エラー: BaseTestSqlは繰返し可能な注釈型ではありません 17:18:44.495 [ERROR] [system.err] @BaseTestSql(order = 2, sql = "update library_forsearch set formal = '図書館サンプル' where systemid = 'Kanagawa_Sample'") 17:18:44.495 [ERROR] [system.err] ^ 17:18:44.495 [ERROR] [system.err] D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\TestDataResourceTest.java:37: エラー: BaseTestSqlは繰返し可能な注釈型ではありません 17:18:44.495 [ERROR] [system.err] @BaseTestSql(sql = "update user_info set username = 'tanaka jiro' where user_id = 1") 17:18:44.495 [ERROR] [system.err] ^ 17:18:44.495 [ERROR] [system.err] D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\TestDataResourceTest.java:86: エラー: TestDataは繰返し可能な注釈型ではありません 17:18:44.496 [ERROR] [system.err] @TestData(order = 2, value = "web/confirmresult/testdata/001") 17:18:44.496 [ERROR] [system.err] ^ 17:18:44.496 [ERROR] [system.err] D:\project-springboot\ksbysample-webapp-lending\src\test\java\ksbysample\webapp\lending\TestDataResourceTest.java:97: エラー: TestDataは繰返し可能な注釈型ではありません 17:18:44.496 [ERROR] [system.err] @TestData(order = 1, value = "web/confirmresult/testdata/001") 17:18:44.496 [ERROR] [system.err] ^ 17:18:44.510 [ERROR] [system.err] エラー4個 17:18:44.510 [ERROR] [system.err] 警告2個 17:18:44.518 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Compile Java for :compileTestJava' 17:18:44.518 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Compile Java for :compileTestJava' completed 17:18:44.518 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Execute compile for :compileTestJava' 17:18:44.519 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Execute compile for :compileTestJava' completed 17:18:44.519 [DEBUG] [org.gradle.api.internal.tasks.execution.DefaultTaskFingerprinter] Fingerprinting property destinationDir (Output) for task ':compileTestJava' 17:18:44.520 [DEBUG] [org.gradle.api.internal.tasks.execution.DefaultTaskFingerprinter] Fingerprinting property options.annotationProcessorGeneratedSourcesDirectory (Output) for task ':compileTestJava' 17:18:44.520 [DEBUG] [org.gradle.internal.execution.impl.steps.CacheStep] Not storing result of task ':compileTestJava' in cache because the execution failed 17:18:44.521 [DEBUG] [org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter] Removed task artifact state for {} from context. 17:18:44.521 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Completing Build operation 'Task :compileTestJava' 17:18:44.521 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Task :compileTestJava' completed 17:18:44.521 [INFO] [org.gradle.execution.plan.DefaultPlanExecutor] :compileTestJava (Thread[Execution worker for ':' Thread 3,5,main]) completed. Took 4.223 secs.
Compiling with error-prone compiler
というログがあります。error-prone を入れていない demo プロジェクトでは再現していないので、原因は error-prone かもしれません。
build.gradle を以下のように変更して error-prone を外してみます。
plugins { id "java" id "eclipse" id "idea" id "org.springframework.boot" version "2.1.2.RELEASE" id "io.spring.dependency-management" version "1.0.6.RELEASE" id "groovy" id "checkstyle" id "com.github.spotbugs" version "1.6.9" id "pmd" // compileエラーが出るので error-prone を一旦コメントアウトする // id "net.ltgt.errorprone" version "0.0.16" id "de.undercouch.download" version "3.4.3" id "com.gorylenko.gradle-git-properties" version "2.0.0" } .......... [compileJava, compileTestGroovy, compileTestJava]*.options*.encoding = "UTF-8" [compileJava, compileTestGroovy, compileTestJava]*.options*.compilerArgs = [ "-Xlint:all,-options,-processing,-path" // compileエラーが出るので error-prone を一旦コメントアウトする // , "-Xep:RemoveUnusedImports:WARN" // , "-Xep:InsecureCryptoUsage:OFF" // , "-Xep:ParameterName:OFF" ] .......... dependencies { .......... // for Error Prone ( http://errorprone.info/ ) // compileエラーが出るので error-prone を一旦コメントアウトする // errorprone("com.google.errorprone:error_prone_core:${errorproneVersion}") // compileOnly("com.google.errorprone:error_prone_annotations:${errorproneVersion}") ..........
build タスク実行をすると ...は繰返し可能な注釈型ではありません
のエラーは出なくなりました。ただし 警告:タイプ'ExtendWith'内に注釈メソッド'value()'が見つかりません
のエラーが4つに増えて、大量のテストが失敗していました。
error-prone は Java SE を 11 にバージョンアップした後に対応することにし、しばらくコメントアウトしたままにします。
spring-boot-test-2.1.2.RELEASE.jar(/org/springframework/boot/test/context/SpringBootTest.class): 警告:タイプ'ExtendWith'内に注釈メソッド'value()'が見つかりません: org.junit.jupiter.api.extension.ExtendWithのクラス・ファイルが見つかりません
Spring Boot 2.1 Release Notes - JUnit 5 に All @…Test annotations are meta-annotated with @ExtendWith(SpringExtension.class) so this redundant part of the setup can be removed if you’re using JUnit 5.
という記述があり @SpringBootTest
アノテーションが付いていると @ExtendWith(SpringExtension.class)
が自動で付くようになったらしいです。
いろいろ試してみたところ以下の結論でした。
- JUnit 5 のアノテーションである
@ExtendWith(SpringExtension.class)
が自動で付くようになったが JUnit 4 → JUnit 5 にバージョンアップしていないため必要なライブラリが存在しない。 [compileJava, compileTestGroovy, compileTestJava]*.options*.compilerArgs
に-Xlint:all
を指定しているので、compile 時の警告が出力される。- つまり compilerArgs に
-Xlint:all
を指定するのを止めるか、JUnit 5 にバージョンアップしない限りこの警告は消えない。
今回どこかで JUnit 5 にバージョンアップして警告が出ないようにします。
メモ書き&次回は。。。
今回の調査中に以下の点に気づいたのでメモ書きとして残しておきます。
- @ComponentScan に @Repeatable が付与されていることに気づきました。このアノテーションは複数付与可能だったんですね。
- 以前 @Repeatable のサンプルを見て BaseTestSql、BaseTestSqlList を別々のクラス&ファイルで実装したのですが、他の @Repeatable が付与されたアノテーションの実装を見ていたところ List のクラスを別ファイルではなくインナークラスに定義しているものを見かけました。別ファイルにしなくても定義できるようです。
次回は大量のテストが失敗しているのを修正します。
履歴
2019/02/09
初版発行。