Linuxに好きなバージョンのJavaとGradleを手動でインストールする

2022/05/04に公開

背景

Java、はじめました。

いっちょJavaでもやるかと調べて環境構築したら、snapのおかげですんなりいきました。
しめしめと思いつつgradle buildしようとしたところ「JDKのバージョンとGradleのバージョンが対応していないから無理です」と仕事を拒否されました。

https://docs.gradle.org/current/userguide/compatibility.html

「しゃーない、アップデートしてやんよ」と思いましたが、aptsnapにあるJDKやGradleはかなり古いみたいで、絶妙にバージョンが噛み合ってくれません。
最新バージョンのモダンでスカしたイケイケJavaでないと脳内仮想JSに「Java 8が許されるのは〜w」と煽られて発狂しそうなので、手動で好きなバージョンをインストールしました。

環境

  • Linux Mint 20.3 Una (based on Ubuntu 20.04 Focal Fossa)

おおまかな流れはどのディストロでも変わらないはず。

JDK

JDKいっぱいありすぎ問題

「よーし、(お父さん|お母さん)Javaはじめちゃうぞー」と張り切っているところ申し訳ありません。
JavaのコンパイラなどがセットになったJava Development Kit (JDK)は1つではないんです。

  • Oracle JDK
  • OpenJDK
  • Oracle OpenJDK
  • ...etc.

わけがわからねーと思うが(ry

調べたところ、どうも「商用版の他にOSS版も用意して、パッチを取り込む」という最近(?)よくあるやつのようです。
OSS版はOracle自身を含め各社がビルドしているため、いっぱいあるように見えるみたい。

結論としては「どれでもいいけどOracle JDKは個人利用など一部を除いて有償だから気になるならOpenJDKを使え」ということを覚えておけばOKです。

JDKをダウンロードする

各JDKによってことなりますが、tar.gzzipなどが各プラットフォームごとにまとまっていますのでそれをダウンロードします。

Oracle JDK

商用のやつ。

https://www.oracle.com/java/technologies/downloads/

以前のバージョンはJava Archiveというリンクから辿れますが、ダウンロードするにはoracle.comのアカウント登録が必要なようです。

Open JDK

OSS版のやつ。Oracleがビルドしているものが無難だと思いますので、その情報です。

最新のバージョンはここから入手しましょう。

https://jdk.java.net/

以前のバージョンはこっち:

https://jdk.java.net/archive/

解凍して/usr/lib/jvmに置く

タイトル通りです。
.zipなり.tar.gzなりを解凍して/usr/lib/jvmにコピーしましょう。

なぜ/usr/lib/jvmなのか。
それはわかりません(え)。
aptでインストールしたやつがここに入ってたような気がする……

なんにせよ、こんな感じになるはずです。

/usr/lib/jvm
|- java-11-openjdk-amd64
|- openjdk-18.0.0.1.1_linux-x64
|- jdk-16

default-javaというリンクを張る

バージョン名そのままのフォルダでもいいんですが、いろいろと面倒になることが予想されるので、default-javaというリンクを張ることにします。

sudo ln -s /usr/lib/jvm/jdk-17 /usr/lib/jvm/default-java

環境変数を設定する

.bash_profileなりなんなり好きなところで以下の環境変数を設定します。

  • JAVA_HOMEにJavaのインストールディレクトリ(default-java)を設定
  • PATH$JAVA_HOME/binを追加
  • おまけで_JAVA_OPTIONS(アンダースコア必須)に-Dfile.encoding=UTF-8を設定

つまりこういうことです。

export JAVA_HOME='/usr/lib/jvm/default-java'
export _JAVA_OPTIONS='-Dfile.encoding=UTF-8'
export PATH="$JAVA_HOME/bin:$PATH"

PATHで一番前に指定しているのは、aptなどパッケージマネージャでインストールしたものよりもdefault-javaを先に探してほしいからです。

書けたらexec $SHELL -lでシェルを更新するのを忘れずに。

確認する

以上でJDKのインストールは終了です。
javaコマンドが使えるか確認しましょう。

java --version

Gradle

ビルドとかパッケージの依存管理とかしてくれるナウいタスクランナーがGradleです。
ダウンロードしてPATHを通せば使えます。

再掲になりますが、JDKのバージョンによって動作するバージョンが異なるので注意です。

https://docs.gradle.org/current/userguide/compatibility.html

ダウンロードして/usr/lib/gradleに解凍する

https://docs.gradle.org/current/userguide/installation.html

https://gradle.org/releases/

Releasesから好きなバージョンのbinary-onlyという方をダウンロードしてください。
ダウンロードできたら/usr/lib/gradleに解凍します。

default-gradleというリンクを張る

バージョン名そのままのフォルダでもいいんですが、いろいろと面倒になることが予想されるので、default-gradleというリンクを張ることに……って2回目ですね。

sudo ln -s /usr/lib/gradle/gradle-7.4.2 /usr/lib/jvm/default-gradle

Gradleのバージョンはプロジェクト毎にgradle wrapperでGradle Wrapperというものを作って管理するのが推奨されているようです。

環境変数を設定する

またまた.bash_profileなりなんなり好きなところで以下の環境変数を設定します。

つまりこういうことです。

export GRADLE_HOME='/usr/lib/gradle/default-gradle'
export PATH="$GRADLE_HOME/bin:$PATH"

exec $SHELL -lも忘れずに。

確認する

以上でGradleのインストールもできたはずです。
gradleコマンドが使えるか確認しましょう。

gradle --version

と、いうわけで

これで好きなバージョンのJDKとGradleの組み合わせにすることができました。
バージョンを上げたいときはdefault-javadefault-gradleを張り直せば最悪なんとかなります。

いや、jenv使おうぜ……

Discussion