LoginSignup
10
8

Java JDK を Ubuntu にインストールして Hello World する

Last updated at Posted at 2023-03-03

Java JDK を Ubuntu にインストールして Hello World する

こんにちは、@studio_meowtoon です。今回は、WSL の Ubuntu 22.04 に Java JDK をインストールする手順と、Hello World を出力する方法を紹介します。
java_on_ubuntu.png

目的

Windows 11 の Linux でクラウド開発します。

こちらから記事の一覧がご覧いただけます。

実現すること

  • Windows 11 の WSL Ubuntu 22.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 22H2 を使用しています。

WSL の Ubuntu を操作していきますので macOS の方も参考にして頂けます。

WSL (Microsoft Store アプリ版) ※ こちらの関連記事からインストール方法をご確認いただけます

> wsl --version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47

Ubuntu ※ こちらの関連記事からインストール方法をご確認いただけます

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:        22.04

この記事では基本的に 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.6" 2023-01-17
OpenJDK Runtime Environment (build 17.0.6+10-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 17.0.6+10-Ubuntu-0ubuntu122.04, mixed mode, sharing)

Java JDK (開発環境) を Ubuntu にインストールすることが出来ました。

JAVA_HOME を設定

JAVA_HOME とは、Java Development Kit (JDK) のインストール場所を指定する環境変数の一つです。環境変数を設定することで、コマンドラインから 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

ファイルの内容

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.18" 2023-01-17
OpenJDK Runtime Environment (build 11.0.18+10-post-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 11.0.18+10-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)

JAVA_HOME を確認します。

WSL Ubuntu の再ログインが必要です。Windows 11 のコマンドプロンプトで以下のコマンドを実行してください。ターミナルが終了したら、再度ターミナルを立ち上げてください。

> wsl -t Ubuntu-22.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/vm-22.3.1/graalvm-ce-java17-linux-amd64-22.3.1.tar.gz
$ sudo mkdir -p /usr/lib/jvm/graalvm-ce-java17-linux-amd64
$ sudo tar zxvf graalvm-ce-java17-linux-amd64-22.3.1.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.6" 2023-01-17
OpenJDK Runtime Environment GraalVM CE 22.3.1 (build 17.0.6+10-jvmci-22.3-b13)
OpenJDK 64-Bit Server VM GraalVM CE 22.3.1 (build 17.0.6+10-jvmci-22.3-b13, mixed mode, sharing)

JVM に GraalVM を設定することが出来ています。

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

$ gu --version
GraalVM Updater 22.3.1

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
Downloading: Component native-image: Native Image from github.com
Installing new component: Native Image (org.graalvm.native-image, version 22.3.1)

GraalVM Native Image のバージョンを確認します。

$ native-image --version
GraalVM 22.3.1 Java 17 CE (Java Version 17.0.6+10-jvmci-22.3-b13)

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 の開発環境などを紹介していきますので、ぜひお楽しみにしてください。

推奨コンテンツ

10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8