MacにインストールされているJDKのバージョンを変更する(OpenJDK13→OpenJDK8)

MacにインストールされているJDKのバージョンを変更する(OpenJDK13→OpenJDK8)

OpenJDK13をインストールしたのですが、どうもAndroid SDKがJava8で動作するらしく、JDK新しいの入れてしまった問題で、引っかかりました。

 

今回引っかかったところ

Flutterをはじめてみようと思ったのですが、「flutter doctor」コマンドでFlutterのコンポーネントインストール状況を確認しようとしたら以下のようになりまして。

$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.12.13+hotfix.5, on Mac OS X 10.15.2 19C57, locale ja-JP)
[!] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
    ✗ Android license status unknown.
      Try re-installing or updating your Android SDK Manager.
      See https://developer.android.com/studio/#downloads or visit
      https://flutter.dev/setup/#android-setup for detailed instructions.
[!] Xcode - develop for iOS and macOS (Xcode 11.3.1)
    ✗ CocoaPods not installed.
        CocoaPods is used to retrieve the iOS and macOS platform side's plugin code that responds to
        your plugin usage on the Dart side.
        Without CocoaPods, plugins will not work on iOS or macOS.
        For more info, see https://flutter.dev/platform-plugins
      To install:
        sudo gem install cocoapods
[!] Android Studio (version 3.5)
    ✗ Flutter plugin not installed; this adds Flutter specific functionality.
    ✗ Dart plugin not installed; this adds Dart specific functionality.
[!] Connected device
    ! No devices available

! Doctor found issues in 4 categories.

 

今回引っかかったのは、

[!] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
    ✗ Android license status unknown.
      Try re-installing or updating your Android SDK Manager.
      See https://developer.android.com/studio/#downloads or visit
      https://flutter.dev/setup/#android-setup for detailed instructions.

この部分。

 

解決するために

色々調べていると、Android Licenseを設定するために以下のコマンドを試しました。

$ flutter doctor --android-licenses
A newer version of the Android SDK is required. To update, run:
/Users/kiyosan/Library/Android/sdk/tools/bin/sdkmanager --update

SDK Managerをアップデートしろと出るので…

$ /Users/kiyosan/Library/Android/sdk/tools/bin/sdkmanager --update
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
	at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
	at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
	at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
	at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73)
	at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
	... 5 more
きよさん
うーん。。。これはどうやらJava8を入れてないとだめというのが原因らしい。先日入れたのはOpenJDK13と新し目のを入れちゃったので、JDK8まで落とさないと。。。

 

というわけで、brewを使ってJDK8をインストール。以下2コマンドだけでOK。

brewコマンドが通らない(brew入れてない)場合はこちらを参考に。

$ brew tap AdoptOpenJDK/openjdk
==> Tapping adoptopenjdk/openjdk
Cloning into '/usr/local/Homebrew/Library/Taps/adoptopenjdk/homebrew-openjdk'...
remote: Enumerating objects: 40, done.
remote: Counting objects: 100% (40/40), done.
remote: Compressing objects: 100% (37/37), done.
remote: Total 40 (delta 23), reused 6 (delta 0), pack-reused 0
Unpacking objects: 100% (40/40), done.
Tapped 26 casks (98 files, 100.8KB).
$ brew cask install adoptopenjdk8

==> Tapping homebrew/cask
Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask'...
remote: Enumerating objects: 3624, done.
remote: Counting objects: 100% (3624/3624), done.
remote: Compressing objects: 100% (3616/3616), done.
remote: Total 3624 (delta 25), reused 550 (delta 6), pack-reused 0
Receiving objects: 100% (3624/3624), 1.22 MiB | 1.88 MiB/s, done.
Resolving deltas: 100% (25/25), done.
Checking out files: 100% (3604/3604), done.
Tapped 1 command and 3512 casks (3,629 files, 4.0MB).
==> Downloading https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/downl
==> Downloading from https://github-production-release-asset-2e65be.s3.amazonaws
######################################################################## 100.0%
==> Verifying SHA-256 checksum for Cask 'adoptopenjdk8'.
==> Installing Cask adoptopenjdk8
==> Running installer for adoptopenjdk8; your password may be necessary.
==> Package installers may write to any location; options such as --appdir are i
Password:
installer: Package name is AdoptOpenJDK
installer: Installing at base path /
installer: The install was successful.
package-id: net.adoptopenjdk.8.jdk
version: 1.8.0_242-b08
volume: /
location: Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk
install-time: 1579623565
🍺  adoptopenjdk8 was successfully installed!
きよさん
インストールはできたけど、13が標準になったまま…
$ java -version
openjdk version "13.0.2" 2020-01-14
OpenJDK Runtime Environment (build 13.0.2+8)
OpenJDK 64-Bit Server VM (build 13.0.2+8, mixed mode, sharing)

 

Javaがインストールされているディレクトリを除くと、13と8の2種類があることがわかります。

$ ls /Library/Java/JavaVirtualMachines/
adoptopenjdk-8.jdk	jdk-13.0.2.jdk

以下のように、Javaのバージョンを指定するとそのバージョンのJavaのパスが正しく表示されることが確認できます。

$ /usr/libexec/java_home 
/Library/Java/JavaVirtualMachines/jdk-13.0.2.jdk/Contents/Home
$ /usr/libexec/java_home -v 1.8
/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home

…というわけで、「.bash_profile」にexport設定を書き込んで、ユーザ個別の環境変数として使用するJavaのバージョンを設定する方法を取りました。

$ view ~/.bash_profile 
export JAVA_HOME=`/usr/libexec/java_home -v 1.8` #←追記

環境変数を再読み込みするか、ターミナルを開き直す(新しいターミナルを開く)ことでユーザ個別の環境変数を読み込みます。

$ source .bash_profile

Javaのバージョンを確認します。

$ java -version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_242-b08)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.242-b08, mixed mode)
きよさん
無事、JDK13からJDK8を使用する設定に切り替えることができました!

 

最後に、当初引っかかっていたところ(Android SDKのアップデートコマンド)を再び流してみると…

$ /Users/kiyosan/Library/Android/sdk/tools/bin/sdkmanager --update
Warning: File /Users/kiyosan/.android/repositories.cfg could not be loaded.
[=======================================] 100% Computing updates...
$

通った!!!無事アップデートできましたヽ(=´▽`=)ノ

$ flutter doctor --android-licenses
Warning: File /Users/kiyosan/.android/repositories.cfg could not be loaded.
All SDK package licenses accepted.======] 100% Computing updates... 
$

無事Android SDKのライセンス確認も終えて…

$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.12.13+hotfix.5, on Mac OS X 10.15.2 19C57, locale ja-JP)
 
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
[!] Xcode - develop for iOS and macOS (Xcode 11.3.1)
    ✗ CocoaPods not installed.
        CocoaPods is used to retrieve the iOS and macOS platform side's plugin code that responds to
        your plugin usage on the Dart side.
        Without CocoaPods, plugins will not work on iOS or macOS.
        For more info, see https://flutter.dev/platform-plugins
      To install:
        sudo gem install cocoapods
[!] Android Studio (version 3.5)
    ✗ Flutter plugin not installed; this adds Flutter specific functionality.
    ✗ Dart plugin not installed; this adds Dart specific functionality.
[!] Connected device
    ! No devices available

! Doctor found issues in 3 categories.

上から2つ目、Android toolchainのところが無事解決!

きよさん
Flutterはじめてみたのは良いものの、まだまだ先は長そうだ…

Macカテゴリの最新記事