0
0

More than 3 years have passed since last update.

Java11の時代に実装されたSpring BootのアプリケーションはJava17でもworkするのか

Last updated at Posted at 2021-09-14

これはなんですか

俺はJava11をやめるぞジョ○ョー!

長いから結論を先に書いておきます。

つこてるライブラリがものによってはworkできない。

諸元

Java

PC

  • Darwin bb.local 20.6.0 Darwin Kernel Version 20.6.0: Wed Jun 23 00:26:31 PDT 2021; root:xnu-7195.141.2~5/RELEASE_X86_64 x86_64
  • MacOS Big Sur version 11.5.2

Spring Bootその1(軽めのやつ)

  • Spring Boot 2.5.0
  • 実装されたJavaのclass及びinterface 40個くらい
  • Dependencies
[INFO] +- org.springframework.boot:spring-boot-starter-actuator:jar:2.5.0:compile
[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.5.0:compile
[INFO] +- org.springframework.boot:spring-boot-starter-web-services:jar:2.5.0:compile
[INFO] +- org.springframework.boot:spring-boot-starter-security:jar:2.5.0:compile
[INFO] +- org.mybatis.spring.boot:mybatis-spring-boot-starter:jar:2.1.3:compile
[INFO] +- mysql:mysql-connector-java:jar:8.0.25:runtime
[INFO] +- org.springframework.boot:spring-boot-configuration-processor:jar:2.5.0:compile (optional) 
[INFO] +- org.projectlombok:lombok:jar:1.18.20:compile (optional) 
[INFO] +- org.springframework.boot:spring-boot-starter-tomcat:jar:2.5.0:provided
[INFO] +- org.springframework.data:spring-data-commons:jar:2.5.1:compile
[INFO] +- org.springframework.boot:spring-boot-starter-test:jar:2.5.0:test
[INFO] +- io.springfox:springfox-swagger-ui:jar:2.8.0:compile
[INFO] +- io.springfox:springfox-core:jar:2.8.0:compile
[INFO] +- io.swagger:swagger-annotations:jar:1.5.21:compile
[INFO] +- org.springdoc:springdoc-openapi-ui:jar:1.5.4:compile
[INFO] +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.12.3:compile
[INFO] +- org.openapitools:jackson-databind-nullable:jar:0.2.1:compile
[INFO] +- ch.qos.logback:logback-core:jar:1.2.3:compile
[INFO] +- ch.qos.logback:logback-access:jar:1.2.3:compile
[INFO] +- net.rakugakibox.spring.boot:logback-access-spring-boot-starter:jar:2.7.1:compile
[INFO] +- com.amazonaws:aws-java-sdk:jar:1.11.980:compile
[INFO] +- com.amazonaws:aws-java-sdk-logs:jar:1.11.980:compile
[INFO] +- com.amazonaws:aws-java-sdk-ec2:jar:1.11.980:compile
[INFO] +- com.j256.cloudwatchlogbackappender:cloudwatchlogbackappender:jar:2.1:compile
[INFO] +- com.googlecode.json-simple:json-simple:jar:1.1.1:compile
[INFO] +- org.flywaydb:flyway-core:jar:7.7.3:compile
[INFO] \- io.github.yoshikawaa.modelmapper.spring.boot:modelmapper-spring-boot-starter:pom:0.1.0:compile
[INFO]    \- io.github.yoshikawaa.modelmapper.spring.boot:modelmapper-spring-boot-autoconfigure:jar:0.1.0:compile
[INFO]       \- org.modelmapper.extensions:modelmapper-spring:jar:2.3.5:compile
[INFO]          \- org.modelmapper:modelmapper:jar:2.3.5:compile

手順

  1. openjdkのサイトから対象のtar.gzを取得し下記に解凍
curl https://download.java.net/java/GA/jdk17/0d483333a00540d886896bac774ff48b/35/GPL/openjdk-17_macos-x64_bin.tar.gz
tar -xfvz openjdk-17_macos-x64_bin.tar.gz -C /Library/Java/JavaVirtualMachines
  1. Macにインストールしてあるjdkを切り替える

$HOME/.bashrc

JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk
PATH=$JAVA_HOME/bin:$PATH:~/development/flutter/bin:~/Library/Android/sdk/bin:~/Library/Android/sdk/tools/bin:~/Library/Android/sdk/platform-tools:/usr/local/opt/python@3.8/libexec/bin

確認

bb:~ yamamotodin$ java -version
openjdk version "17" 2021-09-14
OpenJDK Runtime Environment (build 17+35-2724)
OpenJDK 64-Bit Server VM (build 17+35-2724, mixed mode, sharing)

よし・・

  1. IntelliJの設定

IntelliJに対しJDKを追加する

image.png

プロジェクトで使うJDKを17にする(一瞬警告が出たような気がするけど見落とした・・)

image.png

グルグルボタン押してmaven設定の読み込み直し後、maven clean。

起動しよう spring-boot-run

org.modelmapper:modelmapper:jar:2.3.5 で起動できないエラー。

[io/github/yoshikawaa/modelmapper/spring/boot/autoconfigure/ModelMapperAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.modelmapper.ModelMapper]: Factory method 'modelMapper' threw exception; nested exception is org.modelmapper.ConfigurationException: ModelMapper configuration errors:

1) Failed to instantiate proxied instance of jp.n-resolution.project.transaction.history.repository.entity.TransactionHistoryEntity. Ensure that jp.n-resolution.project.transaction.history.repository.entity.TransactionHistoryEntity has a non-private constructor.

これと同じ問題?

modelmapperへダイブ!

image.png

java.lang.IllegalStateException: size = 2

なんだろこれ・・

image.png

メソッドが2つあるからダメ? 文脈的にコンストラクタのことかな・・?

だめだわからん。

別方向から攻める意味でほんとに対応してるのかどうかを見るため、changelog を参照
https://github.com/modelmapper/modelmapper/blob/master/CHANGES.md

2.3.6
New Features
Supports Java 13

dependency見ると2.3.5....か・・・
java17とかサポートされてなさそうっすね。

というわけで現状ではmodelmapper関連がworkしないを結論とします。

もしmodelmapperを使いたいならこの辺(io.github.yoshikawaa.modelmapper.spring.boot:modelmapper-spring-boot-starter:pom:0.1.0
)の依存を外して、modelmapperをauto configure無しのつるしで組むようにすること。
おそらくjava12か13あたりからworkしてなかったと思われる。

でも本家modelmapperのchangelogにjava17に正式対応したって話は書いてないので、差し替えても動くかどうかは未知数。

新規プロジェクトで modelmapperの最新版にして試してみるか・・
というわけで、現状では既存プロジェクトに対するjdkのアップデートはやらない方向にします。

なお、Spring Bootそのものはjava17でも動作することを確認しているので、純粋に使ってるライブラリによる事情であることを申し添えます。

この先はかすれていてよめない。

0
0
0

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
0
0