hayashier Tech Blogs
  • hayashier Tech Blogs
  • Author's Books
    • 実践Redis入門 (日本語版)
    • 実践Redis入門 (한국어판)
  • Top Contents
    • Dive Deep Redis
    • Dive Deep Memcached
    • Kubernetes 入門
    • TCP 入門
    • TLS 入門
    • GPG 入門
    • サービス障害が発生した場合の対応方法
    • よく使うトラブルシューティング コマンド実行例 まとめ
    • コピペで使えるELBのアクセスログ解析による事象分析 (ShellScript, Athena)
  • Containers
    • Docker 入門
    • Nomad 導入
    • Dockerを利用してさっと検証環境構築
  • Kubernetes
    • Kubernetes 入門
    • Kubernetes 導入 with Amazon Linux 2
    • EKSを利用してKubernetesでSpring MVCをデプロイ (NLB + Auto Scaling)
  • Load Balancer
    • ALB 認証 導入
    • TLS extensions support with ALB
    • ELB(CLB,ALB,NLB)の種類ごとのHTTPレスポンスの違い
    • ELB(CLB) で WebSocket 通信
  • RDBMS
    • PostgreSQL DBA 入門
    • RDBMS Benchmark Get Started
    • RDBMS サンプルデータ生成 Get Started
    • RDS PostgreSQL Extensions Get Started
    • RDBMS Engine Inspection for Troubleshooting
  • Redis
    • Dive Deep Redis ~ 入門から実装の確認まで
    • Dive Deep Redis Internals ~ GETコマンド実行時の動作 ~
    • RedisのString型は今でも本当に512MBが上限か?
    • Redis 公式ドキュメント まとめ
    • Redis / Memcached Source Code Reading - Overview -
  • Memcached
    • Dive Deep Memcached ~ 入門から実装の確認まで ~
    • Dive Deep Memcached ~ SETコマンド実行時の動作 ~
    • Memcached 公式ドキュメント まとめ
    • memtier_benchmark + memcached-tool の導入
    • Redis / Memcached Source Code Reading - Overview -
  • Hadoop
    • Hadoop Get Started
  • Networking
    • TCP 入門
    • TLS 入門
    • ksnctf: HTTPS is secure, Writeup (TLS 通信解読)
    • オンプレ側ルーター(Cisco 1812J, Juniper SRX210, YAMAHA RTX 1210)から Direct Connect へ BGP 設定
  • Software
    • アルゴリズムとデータ構造 入門
    • デザインパターン 入門
    • ソフトウェアテスト 入門
  • System Admin
    • Shell Script 入門
    • サービス障害が発生した場合の対応方法
    • よく使うトラブルシューティング コマンド実行例 まとめ
    • コピペで使えるELBのアクセスログ解析による事象分析 (ShellScript, Athena)
    • GPG 入門
    • Operation Misc
  • Development
    • ローカル環境のプログラミング言語のバージョンを切り替え macOS
    • /usr/local/Cellar/pyenv/1.2.21/libexec/pyenv: No such file or directoryのエラーの対処方法
  • AWS
    • AWS Misc
    • AWS CLI, AWS SDKのリトライ処理の実装について
    • AWS CLI バージョンアップでエラー発生を解消
    • Elastic Beanstalkで稼働しているアプリケーション(Ruby, Sinatra)をAmazon Linux AMIからAmazon Linux2へ移行
    • Elastic Beanstalkでインスタンス入れ替え後にnginxのデフォルトの画面が表示されてしまう問題の対応
    • Amazon Lightsail に SSL 証明書設置 with Let's Encrypt (自動更新)
    • Amazon Lightsailで10分で作るお手軽Markdownで書く独自ドメインのブログサイト構築
    • Lambdaをローカルでテスト(with Docker)
    • ECS + ALB でダウンタイムなしでデプロイ
    • `Repository packages-microsoft-com-prod is listed more than once in the configuration`のメッセージの解消方法
  • Others
    • Pandoc 導入
    • textlint + prh による文章校正
    • 紙書籍をPDFに変換
    • Sphinx 導入
    • さくっとPocketのブックマークをはてなブックマークに移行
    • Macが突然起動しなくなった話
    • Macでターミナルが開かない (zsh編)
    • ホスト型 IDS Tripwire とネットワーク型 IDS Snort の導入 with CentOS 6
    • JMeter 導入
    • Squid 導入 with Amazon Linux AMI
    • Spring MVCを導入 (+ MySQL, Redis)
    • 外資系企業で働いている場合の確定申告方法 (RSU考慮)
Powered by GitBook
On this page
  • ローカル環境のプログラミング言語のバージョンを切り替え macOS
  • Java
  • Ruby - rbenv
  • Python - pyenv
  • Node.js - nodenv
  1. Development

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

PreviousOperation MiscNext/usr/local/Cellar/pyenv/1.2.21/libexec/pyenv: No such file or directoryのエラーの対処方法

Last updated 14 days ago

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

たしかに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

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"` 

OpenJDK 17をインストールする場合は以下のように実行。

$ jenv add /usr/local/opt/openjdk/libexec/openjdk.jdk/Contents/Home
  • References

すると、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)

Errors

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)
  • References

追記予定

Ruby - rbenv

Python - pyenv

Node.js - nodenv

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

Maven Build Failure - Compiler Plugin
jenv
jenv can't find java 17 installed through the brew on MacOS
jenv
jenv: no such command `enable-plugin' #64
MacのBrewで複数バージョンのJavaを利用する + jEnv