概要
Spring boot Initializrを使ってプロジェクトを作成後、梱包されているGradle wrapperでそのプロジェクトのコンパイルを試みるも、エラーになりました。
build.gradleに記述を追加することで、解決できたのでその方法を記述します。
Spring boot プロジェクトの作成
依存パッケージの同時ダウンロードや、Spring bootのバージョン、コンパイラを指定して、プロジェクトを作成できる、Spring Initializrを使ってプロジェクトを作成しました。
プロジェクト作成時に以下のパラメータを指定しました。
https://start.spring.io/
- Project: Gradle Project
- Language: Java
- Spring Boot: 2.2.5
プロジェクト作成後、一緒に梱包されたGradle wrapperでコンパイルをすると、以下のコンパイルエラーになりました。
java.lang.NoClassDefFoundError: org/gradle/api/internal/plugins/DefaultConvention
at org.jetbrains.plugins.gradle.tooling.builder.ProjectExtensionsDataBuilderImpl.buildAll(ProjectExtensionsDataBuilderImpl.groovy:50)
at org.jetbrains.plugins.gradle.tooling.internal.ExtraModelBuilder.buildAll(ExtraModelBuilder.java:67)
at org.gradle.tooling.provider.model.internal.DefaultToolingModelBuilderRegistry$BuildOperationWrappingToolingModelBuilder$1$1.create(DefaultToolingModelBuilderRegistry.java:104)
// 以下省略
いくつかのページを見て、Gradleのバージョンが悪そうだと見当をつけ、Gradle wrapperのバージョンを変更したらコンパイルが成功するのではないかと仮定しました。
https://github.com/gradle/gradle/issues/11769
バージョンを指定してgradle wrapperを作成する
build.gradleに以下を追記します。
// 省略
wrapper {
gradleVersion = '5.6'
}
一度、Gradle wrapperを削除し、先ほどの記述を追加したbuild.gradleと同じフォルダの階層で、以下コマンドでGradle wrapperを作成しました。
$ gradle wrapper
// 作成後、バージョンを確認します。
$ ./gradlew --version
Downloading https://services.gradle.org/distributions/gradle-5.6-bin.zip
.........................................................................................
Welcome to Gradle 5.6!
Here are the highlights of this release:
- Incremental Groovy compilation
- Groovy compile avoidance
- Test fixtures for Java projects
- Manage plugin versions via settings script
For more details see https://docs.gradle.org/5.6/release-notes.html
------------------------------------------------------------
Gradle 5.6
------------------------------------------------------------
// 省略
コンパイルに若干時間がかかりますが、終了後、作成されたGradlewを使って,
Spring Initializrで作成したプロジェクトをコンパイルすると、無事にコンパイルできました。
追記
調べていてわかったのですが、build.gradleに記述を追加しなくても、Gradle wrapperのバージョンは変更できそうです。
$ gradle wrapper --gradle-version 5.6
まとめ
Spring Initializrで作成したプロジェクトに梱包されたGradle wrapperで、プロジェクトをコンパイルできない時の解決方法を記述しました。
今回はSpring Initializr起因の問題の解決方法でしたが、
Gradle WrapperのGradleバージョンを変更する時にも、上記のコマンドは利用できると思うので、簡単にまとめておきます。