Amazon LinuxでJava8/Tomcat8の環境を構築する

79件のシェア(ちょっぴり話題の記事)

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

渡辺です。

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コマンドによる切り替えが必要です。

  • s.hacker

    1.7に戻すことがあると、これにも触れたほうがいいかと思われます。

    yum install java-1.7.0-openjdk-devel java-1.8.0-openjdk-devel
    alternatives –config javac

  • SHUJI

    コメントありがとうございます!
    そうですね、最初は alternatives も使っていたんですが、alternativesを使うとUserDataなどで自動化しにくいんですよね(対話コンソールが起動してしまうのでパスを決め打ちするなど必要)。
    汎用的にスクリプト一発で沈めたかったので、最終的に1.7をremoveするのがベストと判断しました。
    あと、AWSで構築する場合だと、1.7に戻すならば環境毎作り直してしまうかなぁ…。