ローカル環境のプログラミング言語のバージョンを切り替え 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)
追記予定