これはなんですか
俺はJava11をやめるぞジョ○ョー!
長いから結論を先に書いておきます。
つこてるライブラリがものによってはworkできない。
諸元
Java
- https://jdk.java.net/17/
- JDK 17 Release-Candidate Builds (2021-08-06)
- arch: macOS/x64
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
手順
- 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
- 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)
よし・・
- IntelliJの設定
IntelliJに対しJDKを追加する
プロジェクトで使うJDKを17にする(一瞬警告が出たような気がするけど見落とした・・)
グルグルボタン押して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へダイブ!
java.lang.IllegalStateException: size = 2
なんだろこれ・・
メソッドが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でも動作することを確認しているので、純粋に使ってるライブラリによる事情であることを申し添えます。
この先はかすれていてよめない。