TomcatでJSPがコンパイルできない。

どうやらtomcat6.0.24のバグで、
jsp内で変数の宣言が重複しているとコンパイルができずにエラーになるらしい。

org.apache.jasper.JasperException: JSPのクラスをコンパイルできません:
Duplicate local variable hogehoge
....



6.0.23以前のソースから変えていないのに、
このエラーが出るときはtomcatを疑ったほうが良さそう。

元々、defineタグなどで変数を宣言する際に変数名が完全に一致していた場合でも、
tocamtが(jasperが?)優しさを見せて重複されてる宣言を1つにまとめてくれたっぽい。
でも6.0.24からまとめてくれずにそのまま.javaに出力されるため、
.classへのコンパイル時にエラーになってしまう。


扱い的にはtomcatのバグのようだ。


bugziraにも登録されていた。
https://issues.apache.org/bugzilla/show_bug.cgi?id=48879


でもまだ最新の6.0.26でも解決されていないっぽい。
http://tomcat.apache.org/tomcat-6.0-doc/changelog.html



本当は変数宣言を重複して行っているほうが悪いのだが、
急にエラーになってしまった場合はとりあえずjspから重複している宣言を削ることによって回避が可能。


ちなみにtomcatのバージョンの確認方法は↓

./catalina.sh version

今回の場合に特に重要なのはServer versionかな。




Linux環境にてTomcatバージョンを確認する
http://gxcs.blogspot.com/2009/04/linuxtomcat.html