Java JDK を Ubuntu にインストールして Hello World する
こんにちは、@studio_meowtoon です。今回は、WSL の Ubuntu 24.04 に Java JDK をインストールする手順と、Hello World を出力する方法を紹介します。
目的
Windows 11 の Linux でクラウド開発します。
こちらから記事の一覧がご覧いただけます。
実現すること
- Windows 11 の WSL Ubuntu 24.04 に Java JDK をインストールして、Java プログラムをビルド、実行するシンプルな開発環境を構築します。
技術トピック
Java JDK とは?
こちらを展開してご覧いただけます。
Java JDK
Java JDK とは、Java プログラミング言語で開発されたアプリケーションを作成するためのソフトウェアパッケージです。JDK には、Java 言語で書かれたコードをコンパイルして実行可能なバイナリファイルを生成するための Java コンパイラや、Java アプリケーションを実行するための Java ランタイムが含まれています。
JDK には、Java アプリケーションを開発するために必要なさまざまなツールやライブラリが含まれているため、Java アプリケーションを開発するためには、JDK のインストールが必要です。
JDK には、Oracle JDK や OpenJDK など複数の実装があります。ただし、Oracle JDK は商用利用に対してライセンス費用が必要となる場合があるため、一般的には OpenJDK が好まれます。
開発環境
- Windows 11 Home 23H2 を使用しています。
WSL の Ubuntu を操作しますので macOS の方も参考にして頂けます。
WSL (Microsoft Store アプリ版) ※ こちらの関連記事からインストール方法をご確認いただけます
> wsl --version
WSL バージョン: 2.2.4.0
カーネル バージョン: 5.15.153.1-2
WSLg バージョン: 1.0.61
Ubuntu ※ こちらの関連記事からインストール方法をご確認いただけます
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.04 LTS
Release: 24.04
Codename: noble
この記事では基本的に Ubuntu のターミナルで操作を行います。Vim を使用してコピペする方法をはじめて学ぶ人のために、以下の記事で手順を紹介しています。ぜひ挑戦してみてください。
JDK インストール
存在を確認します。
$ java -version
コマンド 'java' が見つかりません。次の方法でインストールできます:
※ 以下省略
OpenJDK のリストを表示します。
※ openjdk-17-jdk があることを確認します。
$ apt-cache search openjdk
openjdk-17-jdk - OpenJDK Development Kit (JDK)
インストールします。
$ sudo apt update
$ sudo apt install openjdk-17-jdk
バージョンを確認します。
$ java -version
openjdk version "17.0.12" 2024-07-16
OpenJDK Runtime Environment (build 17.0.12+7-Ubuntu-1ubuntu224.04)
OpenJDK 64-Bit Server VM (build 17.0.12+7-Ubuntu-1ubuntu224.04, mixed mode, sharing)
Java JDK (開発環境) を Ubuntu にインストールすることができました。
JAVA_HOME を設定
JAVA_HOME とは、Java Development Kit (JDK) のインストール場所を指定する環境変数の1つです。環境変数を設定することで、コマンドラインから JDK のパスを簡単に参照できます。これは、Java 開発時に便利な機能であり、ビルドツールやフレームワークなどからも使用されます。
JAVA_HOME 設定を追記します。
$ vim ~/.bashrc
一番下へ次の4行を追加します。
# JDK
JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
export PATH
設定を反映します。
$ source ~/.bashrc
パスを確認します。
$ echo $JAVA_HOME
/usr/lib/jvm/java-17-openjdk-amd64
$ echo $PATH
Java JDK の PATH を設定することができました。
Hello World を表示する手順
プロジェクトフォルダーを作成します。
※ ~/tmp/hello-java をプロジェクトフォルダーとします。
$ mkdir -p ~/tmp/hello-java
$ cd tmp/hello-java
Java ソースファイルを作成します。
$ vim HelloWorld.java
ファイルの内容
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
これは、Java で Hello World を表示するための最小限のプログラムです。public クラス HelloWorld を定義し、main メソッドを実装し、文字列 "Hello World!" をコンソールに出力します。
コンパイルします。
$ javac HelloWorld.java
javac は、Java プログラムをコンパイルするためのコマンドです。Java コンパイラがソースコードをバイトコードに変換し、実行可能なバイナリファイルを生成します。
実行します。
$ java HelloWorld
java は、Java プログラムを実行するためのコマンドです。このコマンドを実行すると、Java 仮想マシン が起動され、HelloWorld.class ファイルが実行されます。
Java コマンドでは、実行するクラス名を指定する必要があります。指定されたクラス名を使って Java 仮想マシンがクラスファイルを探し、プログラムを実行します。通常、クラス名には拡張子 .class は付けず、クラス名のみを指定します。
Hello World!
ターミナルに "Hello World!" と表示することができました。
プロジェクトのファイル構成を確認します。
$ sudo apt update
$ sudo apt install tree
$ tree
.
├── HelloWorld.class
└── HelloWorld.java
ファイル | 内容 |
---|---|
HelloWorld.java | Java プログラムを記述するためのテキストファイルです。Java ソースファイルとも呼ばれます。通常、Java プログラムのコードはこのファイルに書かれます。 |
HelloWorld.class | Java プログラムをコンパイルしたバイナリファイルです。コンパイルすることによって、Java ソースコードが Java バイトコードに変換され、このファイルに保存されます。実行するためには、このファイルが必要になります。 |
HelloWorld.java は Java のソースコードを記述するテキストファイル、HelloWorld.class は Java ソースコードをコンパイルして生成されたバイナリファイルです。
Java のバージョン切り替えについて
※ Ubuntu に異なるバージョンの Java JDK をインストールして、それらを適時切り替えて使用できます。
Java 8 LTS と、Java 11 LTS をインストールします。
$ sudo apt update
$ sudo apt install openjdk-8-jdk
$ sudo apt install openjdk-11-jdk
Java コンパイラのバージョンを切り替えてみます。
※ 1で Java 11 を選択します。
$ sudo update-alternatives --config javac
alternative javac (/usr/bin/javac を提供) には 3 個の選択肢があります。
選択肢 パス 優先度 状態
------------------------------------------------------------
* 0 /usr/lib/jvm/java-17-openjdk-amd64/bin/javac 1711 自動モード
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/javac 1111 手動モード
2 /usr/lib/jvm/java-17-openjdk-amd64/bin/javac 1711 手動モード
3 /usr/lib/jvm/java-8-openjdk-amd64/bin/javac 1081 手動モード
Java バージョンを切り替えてみます。
※ 1で Java 11 を選択します。
$ sudo update-alternatives --config java
alternative java (/usr/bin/java を提供) には 3 個の選択肢があります。
選択肢 パス 優先度 状態
------------------------------------------------------------
* 0 /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1711 自動モード
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 手動モード
2 /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1711 手動モード
3 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 手動モード
バージョンを確認します。
$ java -version
openjdk version "11.0.24" 2024-07-16
OpenJDK Runtime Environment (build 11.0.24+8-post-Ubuntu-1ubuntu324.04.1)
OpenJDK 64-Bit Server VM (build 11.0.24+8-post-Ubuntu-1ubuntu324.04.1, mixed mode, sharing)
JAVA_HOME を確認します。
WSL Ubuntu の再ログインが必要です。Windows 11 のコマンドプロンプトで以下のコマンドを実行してください。ターミナルが終了したら、再度ターミナルを立ち上げてください。
> wsl -t Ubuntu-24.04
Ubuntu のターミナルで確認します。
$ echo $JAVA_HOME
/usr/lib/jvm/java-11-openjdk-amd64
※ 環境変数が Java 11 に変更されていることを確認できました。
このように Java JDK のバージョンをプロジェクトにあわせ手軽に切り替えることができます。
GraalVM ビルド環境
こちらを展開してご覧いただけます。
学習が目的の Java 開発環境では GraalVM はとくに必要ありません! GraalVM は、高速な JIT コンパイラやネイティブイメージの作成などの特徴があるため、一部の特殊な用途を除いては、通常の Java 開発環境である JDK や OpenJDK を使用することが推奨されています。
GraalVM とは?
GraalVM は、Oracle によって開発された Java 仮想マシンの1つで、Java や Kotlin、Scala などのさまざまな言語の実行や、ネイティブバイナリへの変換が可能なマルチ言語ランタイム環境です。GraalVM は、通常の Java 仮想マシンよりも高速に実行できます。また、Java コードをネイティブバイナリに変換することによって、より高速で軽量なアプリケーションを実行できるようになります。さらに、JavaScript エンジンである Node.js をホストすることもでき、複数の言語の統合において優れた柔軟性を持っています。
GraalVM インストール
Ubuntu で Native Image ビルドを行うためには以下の手順が必要です。
この記事では手動でインストールする方法を紹介しています。
GraalVM を手動で /usr/lib/jvm/ にインストールします。
$ cd ~
$ wget https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-17.0.9/graalvm-community-jdk-17.0.9_linux-x64_bin.tar.gz
$ sudo mkdir -p /usr/lib/jvm/graalvm-ce-java17-linux-amd64
$ sudo tar zxvf graalvm-community-jdk-17.0.9_linux-x64_bin.tar.gz -C /usr/lib/jvm/graalvm-ce-java17-linux-amd64 --strip-components=1
インストールされた GraalVM のパスを確認します。
$ ls -la /usr/lib/jvm/
graalvm-ce-java17-linux-amd64
現在インストールされた JVM を確認します。
※ そのまま Enter します。
$ sudo update-alternatives --config java
選択肢 パス 優先度 状態
------------------------------------------------------------
0 /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1711 自動モード
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 手動モード
* 2 /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1711 手動モード
3 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 手動モード
GraalVM を update-alternatives に設定します。
※ 優先順位の数値を 1017 (※任意) に設定しています。
※ GraalVM の優先順位を下げる意図があります。
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/graalvm-ce-java17-linux-amd64/bin/java 1017
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/graalvm-ce-java17-linux-amd64/bin/javac 1017
GraalVM に切り替えてみます。
※ GraalVM の番号を選択します。
$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac
削除する場合と自動モードに戻す場合
※ 削除する場合
$ sudo update-alternatives --remove java /usr/lib/jvm/graalvm-ce-java17-linux-amd64/bin/java
$ sudo update-alternatives --remove javac /usr/lib/jvm/graalvm-ce-java17-linux-amd64/bin/javac
※ 自動モードに戻す場合
$ sudo update-alternatives --auto java
$ sudo update-alternatives --auto javac
JAVA_HOME を動的に設定しているので Ubuntu に再ログインします。
※ WSL の場合ターミナルを閉じて再度開きます。
バージョンを確認します。
$ java -version
openjdk version "17.0.9" 2023-10-17
OpenJDK Runtime Environment GraalVM CE 17.0.9+9.1 (build 17.0.9+9-jvmci-23.0-b22)
OpenJDK 64-Bit Server VM GraalVM CE 17.0.9+9.1 (build 17.0.9+9-jvmci-23.0-b22, mixed mode, sharing)
JVM に GraalVM を設定することができています。
GraalVM Updater のバージョンを確認します。
$ gu --version
GraalVM Updater 23.0.2
GraalVM Updater は、GraalVM のインストール、アップデート、アンインストールを行うためのツールです。 gu は、GraalVM Updater のコマンドです。
Native Image コマンドをインストール(確認)します。
$ sudo $(which gu) install native-image
Downloading: Component catalog from www.graalvm.org
Processing Component: Native Image
Component Native Image (org.graalvm.native-image) is already installed.
GraalVM Native Image のバージョンを確認します。
$ native-image --version
native-image 17.0.9 2023-10-17
GraalVM Runtime Environment GraalVM CE 17.0.9+9.1 (build 17.0.9+9-jvmci-23.0-b22)
Substrate VM GraalVM CE 17.0.9+9.1 (build 17.0.9+9, serial gc)
GraalVM Native Image は、Java アプリケーションをネイティブコードにコンパイルし、高速かつ軽量なネイティブアプリケーションを生成するためのツールです。
ネイティブバイナリへのビルドに必要なライブラリをインストールします。
$ sudo apt update
$ sudo apt install build-essential libz-dev zlib1g-dev
GraalVM がインストールされたことで、Java プログラムをネイティブイメージにビルドすることが可能になりました。今後、別の記事で GraalVM を使った Hello World プログラムのネイティブイメージへのビルド方法をご紹介します。
まとめ
- Ubuntu に Java JDK をインストールして、シンプルな開発環境を構築することができました。
実際の開発では、軽量なテキストエディターである VS Code や、IDE (統合開発環境) を使用して、Java プログラムを開発することが一般的です。しかし、javac コマンドでコンパイルしたり、java コマンドでクラスファイルを実行したりすることも、Java 開発環境を理解する上で役立ちます。
どうでしたか? Window 11 の WSL Ubuntu に、Java の開発環境を手軽に構築できます。ぜひお試しください。今後も Java の開発環境などを紹介しますので、ぜひお楽しみにしてください。
推奨コンテンツ