ローカル環境のプログラミング言語のバージョンを切り替え macOS

Java

Javaのバージョンを切り替えようとした背景としては、mvn clean installを実行したところ、以下のエラーを受け取ったことが理由でした。

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project ReleaseBuildApp: Fatal error compiling: java.lang.ExceptionInInitializerError: Unable to make field private com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs accessible: module jdk.compiler does not "opens com.sun.tools.javac.processing" to unnamed module @193594ad -> [Help 1]

Mavenの期待するバージョンと利用しているJavaのバージョンが異なる時に上記のエラーを受け取る事がわかりました(Refer: Maven Build Failure - Compiler Plugin )

たしかにpom.xmlでJava 8を期待するものとなっていました。

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
    <source>1.8</source>
    <target>1.8</target>
    </configuration>
</plugin>

一方で、ローカル端末の環境はJava 15でした。

$ java -version
java version "15.0.1" 2020-10-20
Java(TM) SE Runtime Environment (build 15.0.1+9-18)
Java HotSpot(TM) 64-Bit Server VM (build 15.0.1+9-18, mixed mode, sharing)

ローカル環境ではこのバージョンのみ入っていました。

$ /usr/libexec/java_home -V
Matching Java Virtual Machines (1):
    15.0.1, x86_64:	"Java SE 15.0.1"	/Library/Java/JavaVirtualMachines/jdk-15.0.1.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk-15.0.1.jdk/Contents/Home

Java 8をインストールしますが、ライセンスの関係でOpenJDKが利用できないので、AdoptOpenJDKやCorretto,Zuluなどを入れます。ここではCorrettoを使用します。

$ brew install --cask corretto8

以下のように実行することで、Javaのバージョンの切り替え完了です。

$ export JAVA_HOME=`/usr/libexec/java_home -v "1.8"`
$ PATH=${JAVA_HOME}/bin:${PATH}

以下のように反映が適用されていることが確認できます。

$ java -version
openjdk version "1.8.0_312"
OpenJDK Runtime Environment Corretto-8.312.07.1 (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM Corretto-8.312.07.1 (build 25.312-b07, mixed mode)

環境変数JAVA_HOMEに代入された値は参考までに以下のような値です。

$ /usr/libexec/java_home -v "1.8"
/Library/Java/JavaVirtualMachines/amazon-corretto-8.jdk/Contents/Home
$ /usr/libexec/java_home -v "15" 
/Library/Java/JavaVirtualMachines/jdk-15.0.1.jdk/Contents/Home

jenv

  • jenvを利用する方法もあります。jenvを利用することで、簡単に変えられるようにします。

Javaの現状のバージョンが以下の通りであるとします。

$ java --version
java 15.0.1 2020-10-20
Java(TM) SE Runtime Environment (build 15.0.1+9-18)
Java HotSpot(TM) 64-Bit Server VM (build 15.0.1+9-18, mixed mode, sharing)

jenvをインストールします。

$ brew install jenv
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
$ echo 'eval "$(jenv init -)"' >> ~/.zshrc
$ source ~/.zshrc
$ mkdir -p ~/.jenv/versions  

現在jenvを通してインストールされているJavaのバージョンは他にない状態です。

$ jenv versions
* system (set by /Users/hayshogo/.jenv/version)

Java 8とJava 15をインストールします。

$ jenv add `/usr/libexec/java_home -v "1.8"`
$ jenv add `/usr/libexec/java_home -v "15"` 

すると、jenvを通して以下のJavaのバージョンがインストールされたことが確認できます。

$ jenv versions                             
* system (set by /Users/hayshogo/.jenv/version)
  1.8
  1.8.0.312
  15
  15.0
  15.0.1
  corretto64-1.8.0.312
  oracle64-15.0.1

以下のようにバージョンを切り替えます。

$ jenv global 1.8.0.312
$ jenv versions
  system
  1.8
* 1.8.0.312 (set by /Users/hayshogo/.jenv/version)
  15
  15.0
  15.0.1
  corretto64-1.8.0.312
  oracle64-15.0.1
$ jenv version
1.8.0.312 (set by /Users/hayshogo/.jenv/version)

java -versionをしてもうまく切り替わらない場合は、jenv doctorを実行します。

$ jenv doctor
[OK]	No JAVA_HOME set
[ERROR]	Java binary in path is not in the jenv shims.
[ERROR]	Please check your path, or try using /path/to/java/home is not a valid path to java installation.
	PATH : /usr/local/Cellar/jenv/0.5.4/libexec/libexec:/Users/hayshogo/.jenv/bin:/Users/hayshogo/.pyenv/shims:/Users/hayshogo/.rbenv/shims:/Users/hayshogo/.nodenv/shims:/usr/local/src/scala/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin:/Applications/Wireshark.app/Contents/MacOS:/Users/hayshogo/.nodebrew/current/bin:/usr/local/php5/bin:/usr/local/Cellar/pyenv-virtualenv/1.1.5/shims:/Users/hayshogo/.pyenv/bin:/usr/local/apache-maven-3.5.0/bin:/Users/hayshogo/.golang/bin:/Users/hayshogo/.local/bin/:/usr/local/opt/mysql-client/bin:/usr/local/texlive/2019/bin/x86_64-darwin/:/usr/local/opt/openssl/bin:/Users/hayshogo/.toolbox/bin:/Users/hayshogo/scripts/:/usr/local/opt/curl/bin:/Users/hayshogo/.pyenv/shims:/Users/hayshogo/.rbenv/shims:/Users/hayshogo/.nodenv/shims:/usr/local/src/scala/bin
[ERROR]	Jenv is not loaded in your zsh
[ERROR]	To fix : 	echo eval "$(jenv init -)" >> /Users/hayshogo/.zshrc

提示された解決方法を実行して、設定ファイルを読み込みます。

$ echo eval "$(jenv init -)" >> /Users/hayshogo/.zshrc
$ source ~/.zshrc
$ java -version 
openjdk version "1.8.0_312"
OpenJDK Runtime Environment Corretto-8.312.07.1 (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM Corretto-8.312.07.1 (build 25.312-b07, mixed mode)

追記予定

Ruby - rbenv

Python - pyenv

Node.js - nodenv

My Twitter & RSS

Leave a Reply

Your email address will not be published. Required fields are marked *