はじめに
本稿の筆者は、一般企業でJava/.NET向けの自社プロダクトを開発しています。
Enterprise向けとなると、Java1.4への対応もいまだに求められる状況で、Java1.4での開発環境構築を
行わないと自社製品の開発ができません。
で、WindowsのJava1.4向けのインストーラは、代々受け継がれてきたものがある&32bit版でも、
Windows上ではちゃんと動いている(ように見える)のですが、Linux版ではそうはいかず、
いろいろな記事を見回ってみたものの、すべての情報がまとめられた環境はなかったので、
だれか困っている人の助けになればと思い執筆しました。(そんな人いないか・・・?)
TL;DR
- OracleのJava Archive ダウンロードサイトから、バイナリを取得
- ld-linux.so.2をインストール
- バイナリを実行し、ライセンスを読み、agreeするとインストールが始まる
- JAVA_HOMEとか設定して、あとはいつも通り使うだけ。
実行環境
試行錯誤で環境が汚れるのがいやなので、Dockerを使います。
- OS: CentOS 7.7.1908 (Docker on CentOS on VirtualBox)
- docker version: 19.03.5
失敗編
準備するもの
OracleのJava Archive ダウンロードサイトから、バイナリを取得します。
- j2sdk-1_4_2_19-linux-i586.bin
インストール手順
- バイナリを、任意のフォルダに展開します。
$ mkdir /usr/local/java/
$ unzip j2sdk-1_4_2_19-linux-i586.bin -d /usr/local/java/
※デフォルトのCentOSイメージの場合、unzipコマンドが入ってないと思うので、インストールしてください。
- 定番の
JAVA_HOME
を設定します
$ export JAVA_HOME=/usr/local/java/j2sdk1.4.2_19
# ついでにPATHも指定します
$ export PATH=${PATH}:${JAVA_HOME}/bin
さて、実行してみましょう!
$ java -version
$ bash: /usr/local/java/j2sdk1.4.2_19/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
あれあれ・・・?
エラーの原因(/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory)
32bit向けにビルドされたバイナリを実行するために必要な、glibcの互換ライブラリらしいです。
これがないと、64bit Linuxでは動かない。
glibcをインストールします
$ yum install -y ld-linux.so.2
さて、実行してみましょう!(2回目)
$ java -version
Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object
はいクソー
エラーの原因(java/lang/NoClassDefFoundError: java/lang/Object)
${JAVA_HOME$}/lib/rt.jar
がない、もしくはその中にjava/lang/Object.class
がないのが原因っぽいのですが、
なんとダウンロードしてきたバイナリの中に、rt.jarが含まれていません。。。
$ cd ${JAVA_HOME}/lib
$ ls -al | grep rt.jar -c
0
いろいろな情報を読み漁りましたが、いい感じの方法は見つかりませんでした。
成功編
$ mkdir /usr/local/java/
# /tmpにバイナリをおいてます
$ chmod +x /tmp/j2sdk-1_4_2_19-linux-i586.bin
$ cd /usr/local/java/
# バイナリを実行
$ /tmp/j2sdk-1_4_2_19-linux-i586.bin
・
・
・
ライセンスが長々と続く
・
・
Do you agree to the above license terms? [yes or no]
# この文章が出たら、ライセンス規約に同意できる場合のみyesを入力してenterでインストールが始まる。
# JAVA_HOMEを設定
$ export JAVA_HOME=/usr/local/java/j2sdk1.4.2_19
# ついでにPATHも指定します
$ export PATH=${PATH}:${JAVA_HOME}/bin
無事、実行できるようになりました。
$ java -version
java version "1.4.2_19"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_19-b04)
Java HotSpot(TM) Client VM (build 1.4.2_19-b04, mixed mode)
念のため、ビルド~実行までを試してみましょう。
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, World");
}
}
親の顔より見たHello, World・・・
$ javac Hello.java
$ java Hello
Hello, World
なんとかなったんじゃないでしょうか
感想
最近のJavaは、バイナリをインストールしてきてPATHさえ通せば使える感じなので、こなれたやり方でやろうとしたら失敗した感じです。。。
バイナリインストールは楽でいいですね!
インストールした後実行ファイル(JAVA_HOME)を別環境にもっていくと、ld-linux.so.2さえあれば動くぞ・・・!