Yoshi.dev

技術系の趣味、またはやった仕事やそこから学んだことを忘れないために

java7 → java9アップデートメモ

やったことメモしてく
先に言っておくとspring boot使っている都合もあって今回はJava9への移行をやめました

build gradleの
sourceCompatibility
targetCompatibility
を9にする
その他IntelliJ使ってたのでProject StructureのProject SDKとかも9にあげてく
gradleのJVMも9にあげとく
もろもろ終わったらRefresh all gradle projectして再読込する
ここで一旦アプリ起動を試す。そしてエラーになる

java9になったことで標準で使えたライブラリが一部使えなくなっているので適宜使えるようにする
compileJava.options.compilerArgs = ["--add-modules", "java.xml.bind"]
こんな感じでもいけるっぽい↓
compileJava.options.compilerArgs = ["--add-modules", "ALL-SYSTEM"]
書いてる通りallだから余計なものも読み込んでしまいそうだけど


lombokが使用できなくなったライブラリを使っているようだった
https://github.com/rzwitserloot/lombok/issues/985
このページの情報を参考にcompilerArgsにjava.xml.ws.annotationを追加
compileJava.options.compilerArgs = ["--add-modules", "java.xml.ws.annotation,java.xml.bind"]
またlombokのバージョンもちょっと古かったので1.16.18にアップデート

アップデートしたことで@BuilderアノテーションなどがDeprecatedになって警告出てたが一旦無視

今度は
com.sun.net.ssl.internal.sslが無いと怒られる
ヌーラボのアカウント基盤を Java 9 にマイグレーションして起きた問題と解決法 | ヌーラボ
こちらを参考に
compireArgsに
"--add-exports", "java.base/com.sun.net.ssl.internal.ssl=ALL-UNNAMED"
を追加することで解決しました
でも最終的にこのパッケージは使わない方向に修正したほうが良さそうです

ここまでやって自分の環境ではコンパイルが通るようになりました。
しかし、動かしてみるとビルドがコケました

ビルド時もadd-modulesを指定する必要がありそうだったので
こんな感じでadd-modulesを指定(spring boot使ってます)
bootRun {
jvmArgs "--add-modules=ALL-SYSTEM"
}

このへんまでやって以下のログが出てきた
```
error the @annotation pointcut expression is only supported at Java 5 compliance level or above
```
どうやら
spring-boot-starter-aop
この辺のライブラリで使ってるAspectJが関係してるっぽい
更に横道それて調べてると
spring boot 1.5系でjava9対応の予定は無いとのこと
github.com
うちはspring boot 1.2だったからコレにてやる気失って終了

予想はしてたけど一旦Java8へのアップデートを目指す
yoshi10321-tech.hatenablog.com