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

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

ただいまの
回答率

88.22%

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

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 4,184

neeg

score 62

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のエイリアスです。

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

0

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/09/13 18:16

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

    キャンセル

  • 2018/09/14 09: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にリンクしていないのか、、、
    今は止められない時間帯なので、あとで試行錯誤してみたいと思います。

    キャンセル

  • 2018/09/19 12: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

    ですが、残念ながら症状変わらずでした。

    キャンセル

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/28 12:54

    ありがとうございます。
    それは恐らく以下になるのではないかと思っています。

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

    web.xml以外に変更箇所があるのかな?と思っておりますが、、、

    キャンセル

  • 2018/09/28 14:01

    ありゃ、すみません。

    となると、以下が要チェックかな。

    * /etc/tomcat6/web.xml が本当に参照されているかどうか
    * 当該コンテキストのWEB-INF/web.xmlで上書きしていないかどうか。

    キャンセル

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

  • ただいまの回答率 88.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る