LoginSignup
11

More than 3 years have passed since last update.

SpringBoot1.5系を2.1系にあげた話

Posted at

はじめに

どうも@chan_kakuです
今回はSpringBoot1.5系が今年の8月でEOLになってしまうということでその対応をしてみて、苦労した点などを述べていきたいと思います。

SpringBootについて

SpringBootとはSpringフレームワークをベースとしたアプリケーションを簡単に作成することができるフレームワークのことです。
詳しくは公式ドキュメントをみてください。

行なったこと(概要)

  • Gradle3系 → Gradle5系
  • SpringBoot1.5系 → SpringBoot2.1系
  • その他依存ライブラリのバージョンアップ

Gradle3系 → Gradle5系

SpringBoot2系にあげるにはまず、Gradleのバージョンを4.4以上にあげないといけなかったため、こちらから取り組みました
今回対象となったプロジェクトはGradleWrapperを利用していたので、以下のようにgradle-wrapper.propertiesを修正しました

gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-all.zip #ここのバージョンを変更しました

SpringBoot1.5系 → SpringBoot2.1系

上記の対応でようやくSpringBoot2系が使えるようになったので、ここでバージョンをあげていきます
基本的なことはこちらのSpringBootのGithubWikiに記載されていますのでご覧になってください

build.gradle
plugins {
    id 'org.springframework.boot' version '2.1.4.RELEASE'
    id 'java'
}

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-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

変更点

boot1.5系ではありませんでしたが、Documentによるとio.spring.dependency-managementを追加しないといけなくなったようです

pluginsの書き方

Gradle3系ではJavaやSpringBootなども以下のように記載していました。

build.gradle
apply plugin: 'java'
apply plugin: 'org.springframework.boot'

しかしながらGradle5系からは書き方が変更になり以下のようにブロックとして書くことが推奨されるようになりました。

build.gradle
plugins {
    id 'org.springframework.boot' version '2.1.4.RELEASE'
    id 'java'
}
dependenciesの書き方

dependenciesの書き方も大きく変更されました。
Gradle3系までの書き方はこのような書き方となってました。

build.gradle
compile('org.springframework.boot:spring-boot-starter')
compile('org.springframework.boot:spring-boot-starter-web')
//.....などなど

基本的に依存ライブラリはcompileで書いていました。
しかしながら、Gradle5系ではimplementationと言う書き方が増えており、compileはdeprecatedになってました
compileimplementationの違いとしては、簡単に言うと、依存関係の伝搬の範囲です。
したがって、以下のようにcompileと書かれていた部分を一旦implementationに置き換えていきました

build.gradle
implementaion('org.springframework.boot:spring-boot-starter')
implementaion('org.springframework.boot:spring-boot-starter-web')
//.....などなど
jar周りの書き方

こちらも少しだけ変更されていました。公式ドキュメント

今まではこのように書いていました

build.gradle
jar {
    baseName = "hoge"
    archiveName = "${baseName}.jar"
    version = "1.0.0-SNAPSHOT"
}

このうちbaseNamearchiveNameがdeprecatedになっていたため、Documentにしたがって以下のように修正しました

build.gradle
jar {
    archiveBaseName = "hoge"
    archiveFileName = "${archiveBaseName}.jar"
    version = "1.0.0-SNAPSHOT"
}

baseNamearchiveBaseName
archiveNamearchiveFileNameへ変更されたようです
これ以外にもappendixなども変更されていますので、ぜひDocumentをご覧ください!!

その他苦労した点など

doma2について

今回バージョンアップしたプロジェクトのDBアクセスにはdoma2を利用していました
元々のdependenciesには以下のように書いていました。

build.gradle
compile('org.seasar.doma.boot:doma-spring-boot-starter:1.1.0')

上記のdependenciesの書き方にもあるように単純にcompileimplementationに置き換えて行ったところ思わぬところではまってしまいました
DIしているクラスでDaoのBeanが登録されていないのでDIできないよーと言うようなエラーが出ていました
しばらくは原因がつかめませんでしたが、一旦doma2のDocumentをみてみたところ元々のbuild.gradleとの差があったので、
以下のように変更したところDaoのBean登録に関しては上手くいきました!

build.gradle
implementation('org.seasar.doma.boot:doma-spring-boot-starter:1.1.1')
implementation("org.seasar.doma:doma:2.24.0")
annotationProcessor("org.seasar.doma:doma:2.24.0")

今までは一番上のdoma-spring-boot-starterだけで動いていたのですが、'doma'自体をimplemetaionで追加しないといけなくなったのと、
annotationProcessorを使ってdomaを入れないといけなくなったみたいでした
このannotationProcessorはGradle5系から追加されたもので、追加しなくてはいけなくなった理由としては、Gradle 5系からはアノテーションプロセッサをコンパイル時のクラスパスから取得する方法がサポートされなくなるらしいからです。
したがって、domaだけではなく今までアノテーションプロセッサをクラスパスから取得していたようなライブラリを利用している場合はこのようにannotationProcessorを追加しなくてはならなくなりました。

jacksonについて

jackson(ジャクソン)とは、JSON形式のデータを処理するためのJavaライブラリで、今回の対象のプロジェクトで使われていました。
こちらも例のごとくcompileを単純にimplementaionに置き換えたところdoma2の時と同じようにjacksonライブラリ内のBean登録あたりエラーが出ていました。
こちらはバージョンを最新にすることで解決することができました。

最後に

今回はこのマイグレーションがどれくらい難しいのか測るために出来るだけ依存ライブラリの少ないプロジェクトを対象に行なってみました。
しかしながらおもっていたよりハマりどころが多く、個人的には難しい印象でした。
1.5系のEOLが今年の8月と言うことなので、出来るだけ早めに動かれることをおすすめします!
この記事が皆さんの参考になれば幸いです。

参考にしたサイト

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide
https://qiita.com/yukina-ge/items/1ca029ed69494bfd36d6
https://qiita.com/opengl-8080/items/6ad642e0b016465891de
https://doma.readthedocs.io/en/2.19.2/build/

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11