#navi_header|Java| [[1071]] にて 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 : Tomcat上でのgetRealPath("/") :#block||> /work/tmp/mvntest/servlet1/src/main/webapp/ ||< : Jetty上でのgetRealPath("/") :#block||> /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について明確な言及がない。 - Java 2 Platform EE v1.3: Interface ServletContext -- http://docs.oracle.com/javaee/1.3/api/javax/servlet/ServletContext.html#getRealPath(java.lang.String) - ServletContext (Java EE 6 ) -- http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContext.html#getRealPath(java.lang.String) #navi_footer|Java|