質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

2回答

9046閲覧

tomcat6でのJSPコンパイルのソースコードバージョンの設定方法

neeg

総合スコア68

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

1グッド

1クリップ

投稿2018/09/11 10:30

編集2018/09/13 09:08

tomcat6にJSPをデプロイしようとしていますが、以下のエラーメッセージがブラウザ上に出力されてJSPがコンパイルできません。

org.apache.jasper.JasperException: JSPのクラスをコンパイルできません: JSPファイル: /index.jsp の中の19行目でエラーが発生しました '<>' operator is not allowed for source level below 1.7 16: <body> 17: <% 18: Collection<String> strs=null; 19: strs= new ArrayList<>();

'<>' operator is not allowed for source level below 1.7
というエラーメッセージが表示されることを考えると、この時使われているjdkは1.7で導入されたダイアモンド演算子の意味を理解した上でエラーを出力している、つまり1.7以上のjdkが使用されているには使用されているのだと解釈しています。
実際にいろいろと検証した結果、1.8が使われているようです。

ですので恐らく問題は、jdkのバージョンではなく、jdkに対して指定されているコンパイル時のソースコードバージョンの指定が1.6以下なのだろう、と思っています。
調べた限り、tomcatがコンパイルするときに使用するjdkに対しての、ソースコードバージョンの指定は以下で行います。

■やったこと
・/etc/tomcat6/web.xmlの変更(compilerSourceVMとcompilerTargetVM)

<init-param> <param-name>compilerSourceVM</param-name> <param-value>1.8</param-value> </init-param> <init-param> <param-name>compilerTargetVM</param-name> <param-value>1.8</param-value> </init-param>

ですが、これだけでは足りないようで、まだ同様のエラーが出力されています。

他にどこか設定するべき箇所はあるでしょうか。

■その他にやってみたこと(主にjdkに1.8が使われるようにする設定)

・JAVA_HOME環境変数の設定

JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk.x86_64

・その後念のためOSの再起動

■確認したこと
・Javaバージョンの確認

root# java -version openjdk version "1.8.0_181" OpenJDK Runtime Environment (build 1.8.0_181-b13) OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)

・javacバージョンの確認

root# javac -version javac 1.8.0_181

・tomcatマネージャで表示される項目JVMのバージョンの確認

JVMバージョン 1.8.0_181-b13

これでもまだ同様のコンパイルエラーが出てコンパイルできない状態です。

JDK1.8が使われるようにするには、他にどのような設定が必要でしょうか。
それともそもそもエラーの意味の解釈が違うでしょうか。

■環境情報
OS:Red Hat Enterprise Linux Server release 6.4 (Santiago)
tomcat:Apache Tomcat/6.0.24

■追記
以下を追加設定しましたが、状況は変わりませんでした。

<init-param> <param-name>compiler</param-name> <param-value>/usr/bin/javac</param-value> </init-param>

※/usr/bin/javacは、/usr/lib/jvm/java-1.8.0-openjdk.x86_64/bin/javacのエイリアスです。

よろしくお願いいたします。

A-pZ👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

https://tomcat.apache.org/tomcat-6.0-doc/jasper-howto.html

compilerSourceVM - What JDK version are the source files compatible with? (Default value: 1.5)
compilerTargetVM - What JDK version are the generated files compatible with? (Default value: 1.5)

とあるので、こちらも指定する必要があるんじゃないかな。

投稿2018/09/26 01:09

chokojori

総合スコア971

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

neeg

2018/09/28 03:54

ありがとうございます。 それは恐らく以下になるのではないかと思っています。 > ■やったこと > ・/etc/tomcat6/web.xmlの変更(compilerSourceVMとcompilerTargetVM) web.xml以外に変更箇所があるのかな?と思っておりますが、、、
chokojori

2018/09/28 05:01

ありゃ、すみません。 となると、以下が要チェックかな。 * /etc/tomcat6/web.xml が本当に参照されているかどうか * 当該コンテキストのWEB-INF/web.xmlで上書きしていないかどうか。
guest

0

投稿2018/09/11 22:25

hichon

総合スコア5737

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

neeg

2018/09/12 04:45

ありがとうございます。 いただいたURLから私の方で試していないものは、web.xml内にJavaコンパイラの 絶対パスを指定する部分でしたので、指定してみました。 今はtomcatの再起動ができない時間帯なのでreloadしてみましたが、 症状は変わりませんでした。 夜間にrestartしてもう一度状況を確認してみます。
neeg

2018/09/13 08:27

昨晩restartしてみましたが、残念ながら状況は変わりませんでした。
hichon

2018/09/13 09:16

回答では、Tomcat 7からECJ(Eclipse Compiler for Java)を引っこ抜いて置き換えろと言ってますが
neeg

2018/09/14 00:58

ありがとうございます。 ecjは最初から4.4.2が入っていました。 > lrwxrwxrwx 1 root root 13 9月 26 14:07 2017 ecj.jar -> ecj-4.4.2.jar ただ、よくよく見てみると、その周囲のシンボリックリンクの張られ方がちょっと怪しいようにも見えます。 > lrwxrwxrwx. 1 root root 13 9月 14 12:16 2016 eclipse-ecj-3.4.2.jar -> ecj-3.4.2.jar > lrwxrwxrwx. 1 root root 21 9月 14 12:16 2016 eclipse-ecj.jar -> eclipse-ecj-3.4.2.jar なんでここが素直に4.4.2にリンクしていないのか、、、 今は止められない時間帯なので、あとで試行錯誤してみたいと思います。
neeg

2018/09/19 03:41

その後、ecj関連のシンボリックリンクを一通り4.2.2に張り直してtomcatをリスタートさせてみました。 > -rw-r--r--. 1 root root 1442090 4月 29 02:02 2010 ecj-3.4.2.jar > -rw-r--r-- 1 root root 2310271 3月 4 23:16 2015 ecj-4.4.2.jar > lrwxrwxrwx 1 root root 13 9月 26 14:07 2017 ecj.jar -> ecj-4.4.2.jar > lrwxrwxrwx. 1 root root 13 9月 14 12:16 2016 eclipse-ecj-3.4.2.jar -> ecj-3.4.2.jar > lrwxrwxrwx 1 root root 13 9月 19 12:32 2018 eclipse-ecj.jar -> ecj-4.4.2.jar > lrwxrwxrwx 1 root root 13 9月 19 12:35 2018 jdtcore.jar -> ecj-4.4.2.jar ですが、残念ながら症状変わらずでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問