Java/Maven3/Eclipse上でサクサクWeb開発 (例:tomcat-maven-plugin) にて tomcat-maven-plugin を選択した理由に、
「実働環境はTomcatなのに、開発をJettyとすることで不要な地雷を踏み抜きそうな悪寒がした。」
と書きましたが、今思い出しました。
実際に地雷を踏み抜いていたから、わざわざTomcatを選んだのでした。
その理由は簡単で、javax.servlet.ServletContext#getRealPath("/") が返す文字列が、Tomcatの場合末尾が '/' 付きで、Jettyの場合末尾の '/' が付いてこない。で、件のEclipseプロジェクトでは
getRealPath("/") + "WEB-INF/foo/bar...";
としていたものだから(他人から引き継いだ既存プロジェクト)、Jettyに載せ替えようと思っても載せ替えられない。
実例:/work/tmp/mvntest/servlet1/src/main/webapp/WEB-INF/web.xml をdeploy
/work/tmp/mvntest/servlet1/src/main/webapp/
/work/tmp/mvntest/servlet1/src/main/webapp
まぁ他にも地雷が埋まってそうだったので、素直にTomcatで打てる手が無いか探していた結果、tomcat-maven-plugin を見つけた次第です。
これだと、
getRealPath("/") + "WEB-INF/foo/bar..."
がJettyだと
/work/tmp/mvntest/servlet1/src/main/webappWEB-INF/foo/bar...
になってしまい、ファイル操作が失敗してしまうという罠・・・。
この辺、もしかして仕様が決まってないのかな?JavaDoc確認しても、J2EE 1.3 と Java EE 6 の双方で、ディレクトリを指定した場合の末尾のPATH SEPARATORについて明確な言及がない。
コメント