Grails > Grails3.0.xから3.2.xへのアップグレード

更新日 2019-10-22
広告

Grails 3.0.1からGrails 3.2.13へアップグレードする方法を紹介します。

まずgrails3.2.13をダウンロードして、解凍します。 そして、環境変数GRAILS_HOMEを、3.2.13の解凍ディレクトリとします。

この状態で、これまでと同じようにGrailsアプリをビルドしようとすると、以下のエラーが発生しました。

Spring Boot plugin's support for Gradle 2.3 is deprecated. Please upgrade to Gradle 2.9 or later.
Cannot resolve reloading agent JAR: Could not resolve all dependencies for configuration ':agent'.
Gradleのバージョンを上げれば解決すると言われています。 gradle.propertiesというファイルの gradleWrapperVersion 変数を2.9に変更してみます。
gradleWrapperVersion=2.9
これで、Gradleのキャッシュを削除し、改めてビルドを走らせてみます。
$ rm -rf ~/.gradle
結果は、変わりませんでした。最初にGradle 2.3をダウンロードしちゃっています。

そこで、gradle/wrapper/gradle-wrapper.propertie を修正してみることにします。

#distributionUrl=https\://services.gradle.org/distributions/gradle-2.3-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-2.9-bin.zip
これで、Gradle 2.9 を使うようになります。

今度は別のエラーが発生しました。

Error initializing classpath: Could not find org.grails.plugins:asset-pipeline:
asset-pipelineプラグインのバージョンも上がったようです。 build.gradleを以下のように修正します(2か所修正)。
  //classpath 'com.bertramlabs.plugins:asset-pipeline-gradle:2.5.0'
  classpath "com.bertramlabs.plugins:asset-pipeline-gradle:2.14.1"
  //runtime "org.grails.plugins:asset-pipeline"
  runtime "com.bertramlabs.plugins:asset-pipeline-grails:2.14.1"
これで、エラーなくビルドできるようになりました!

Grails 3.2では、ロギングライブラリが更新されているため、ログ出力の実装の見直しが必要です。

def login() {
  log.info(params)
例えば、これまでは上記のような感じで、HTTPリクエストのパラメータを表示できていましたが、Grails3.2だと、エラーが出ます。
No signature of method: ch.qos.logback.classic.Logger.info() is applicable for argument types
つまり、infoやwarnなどのメソッドに、オブジェクトをそのまま渡せないようになりました。 Grails3.2のドキュメントにも書いてありますが、以下のようにプレイスホルダーを使う方法に変更する必要があります。
log.info("{}", params)
他には、以下のように使います。
log.info "{}", 9.2D
log.debug "Key: {}, Value: {}", key, value
log.error "{}", exception.message, exception

広告
お問い合わせは sweng.tips@gmail.com まで。
inserted by FC2 system