CentOS6にJDK8・Tomcat7の環境を構築した時に詰まった話

Amazon linuxの場合、

yum install tomcat7

みたいな感じでサクッとインストールが出来ます。

インストールされるTomcatのバージョンは

7.0.57

CentOS6にも同じようにしてTomcat7をインストールしましょう。

Java8インストール

yum -y install java-1.8.0-openjdk-devel

Tomcat7インストール

yum -y install yum-plugin-priorities
rpm -Uvh http://mirrors.dotsrc.org/jpackage/6.0/generic/free/RPMS/jpackage-release-6-3.jpp6.noarch.rpm
vim /etc/yum.repos.d/jpackage.repo
gpgcheck=1
↓
gpgcheck=0
yum install tomcat7-webapps

インストールされるTomcatのバージョンは

7.0.54

JDBCドライバのパスを通す

ln -s /usr/share/java/mysql-connector-java.jar /usr/share/tomcat7/lib/
ln -s /usr/share/java/postgresql-jdbc3.jar /usr/share/tomcat7/lib/

設定の調整

Javaのバージョンを共生させる場合はJAVA_HOME,CLASSPATHを指定しておきます。

# vim /etc/tomcat7/tomcat7.conf

JAVA_HOME="/usr/lib/jvm/java-1.8.0" 
CLASSPATH=".:/usr/lib/jvm/java-1.8.0/jre/lib:/usr/lib/jvm/java-1.8.0/lib:/usr/lib/jvm/java-1.8.0/lib/tools.jar" 

Tomcat7を起動させてプロセスを確認してみると以下の様なエラーが出ました。

/usr/bin/build-classpath: 
error: JAVAVER_LIBDIR /usr/share/java- does not exist or is not a directory 

Javaのバージョンがうまく取れてなくてパスが生成できてないっぽいです。

応急処置的に適当にフォルダを作ってしまいます。

mkdir /usr/share/java-
mkdir /usr/lib/java-

次にエラーログに次のようなエラーが出ました。

Stacktrace:] with root cause
org.apache.jasper.JasperException: JSPのクラスをコンパイルできません: 

いろいろ調べてみたところ、 Tomcat 7.0.54ではecjのバージョンを4系にする必要があるようでした。

# cd /usr/share/tomcat7/lib/
# wget http://central.maven.org/maven2/org/eclipse/jdt/core/compiler/ecj/4.4/ecj-4.4.jar
  • http://stackoverflow.com/questions/19243458/tomcat7-not-compiling-jsp-examples

  • https://github.com/komarevsky/spring-petclinic/commit/ddc89639e0a61baceb6c12e6b87f7ca22bfa4007

  • https://bugzilla.redhat.com/show_bug.cgi?id=1080026
  • https://bugzilla.redhat.com/show_bug.cgi?id=1080026
  • http://tomcat.apache.org/tomcat-7.0-doc/RELEASE-NOTES.txt
  • https://issues.apache.org/bugzilla/show_bug.cgi?id=56283
  • http://stackoverflow.com/questions/6780639/how-to-change-tomcat-compiler