Amazon LinuxでJava8/Tomcat8の環境を構築する
渡辺です。
2014年3月18日にJava8がリリースされ、半年以上が経過しました。 そろそろプロダクション環境でもJava8が採用されているかと思います。
また、先日、AWS環境(Amazon Linux)でも、yumでJava8がインストールできるようになりました。 早速、Java8/Tomcat8で環境を構築しようとしたところ、ビミョーな所ではまってしまいました。
EC2インスタンスの作成
Amazon Linux AMI 2014.09.1 x86_64 HVM EBS(ami-4985b048) を利用しました。 インスタンスタイプはt2.small以上とするのが無難でしょう。
セットアップ
Tomcat8とJava8をインストールする手順は以下の通りです。
$ sudo yum -y install java-1.8.0-openjdk-devel tomcat8 $ sudo alternatives --config java
alternativesコマンドでは、Java7とJava8が表示されますので、Java8を選択してください。
以下、解説。
Amazon Linuxの初期状態
Amazon LinuxはCentOS系(RHEL系)のLinuxですが、初期にインストールされているミドルウェアはAWS環境で使いやすくなっています。 ここがハマるポイントです。
$ java -version java version "1.7.0_71" OpenJDK Runtime Environment (amzn-2.5.3.1.49.amzn1-x86_64 u71-b14) OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)
デフォルトでJava7がインストールされています。
$ javac -version -bash: javac: コマンドが見つかりません
しかし、JREのみでJDKはインストールされていません(javacがない)。
yumで確認してみます。
$ yum list installed | grep java java-1.7.0-openjdk.x86_64 1:1.7.0.71-2.5.3.1.49.amzn1 @amzn-updates javapackages-tools.noarch 0.9.1-1.2.amzn1 installed tzdata-java.noarch 2014i-1.29.amzn1 @amzn-updates
java-1.7.0-openjdkがインストールされていますね。
余談ですが、このjava-1.7.0-openjdkという名前に気をつけてください。 これは、java-1.7.0-openjdkはJRE1.7に相当します。 openjdkなのにJREです...。 JDKは java-1.7.0-openjdk-devel となります。 したがって、このままTomcatをインストールしてもjavacが存在しないためJSPなどをコンパイルできずにエラーとなってしまいます。
Java7 + Tomcat8で実行するならば、java-1.7.0-openjdk-develのインストールが必要です。
$ sudo yum -y install java-1.7.0-openjdk-devel
JDK8のインストール
というわけで、Java8でTomcatを動かすのであれば、JDK8(java-1.8.0-openjdk-devel)をインストールします。
$ sudo yum -y install java-1.8.0-openjdk-devel
確認します。
$ java -version java version "1.7.0_71" OpenJDK Runtime Environment (amzn-2.5.3.1.49.amzn1-x86_64 u71-b14) OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode) $ javac -version javac 1.8.0_25
ナンテコッタイ/(^o^)\
なお、ワタクシはjava-1.8.0-openjdk-develをインストールした後、javacのみで確認をしたため、Java8のwarをTomcatにデプロイしても動かないという罠に嵌まりました...
alternativesコマンドを使い、Javaのバージョンを変更します。
$ sudo alternatives --config java 2 プログラムがあり 'java' を提供します。 選択 コマンド ----------------------------------------------- *+ 1 /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java 2 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.25-0.b18.4.amzn1.x86_64/jre/bin/java Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2
再確認します。
$ java -version openjdk version "1.8.0_25" OpenJDK Runtime Environment (build 1.8.0_25-b18) OpenJDK 64-Bit Server VM (build 25.25-b02, mixed mode) $ javac -version javac 1.8.0_25
まとめ
Amazon LinuxにはJRE7がデフォルトでインストールされています。 JDK8を利用する場合は、インストールするだけでなく、alternativesコマンドによる切り替えが必要です。