Что может быть причиной такой ошибки? Javadoc для File.java говорит, что выдает это исключение, если передается в отрицательном значении. Поэтому вопрос в том, почему яшма переходит в отрицательное значение. Я искал источники яшмы, но я не нашел те, которые точно соответствуют тому, что я использую, номера строк не совсем совпадают. Версия, которую я установил, устанавливает время последнего изменения из File.lastModified, которое никогда не должно возвращать отрицательное значение, согласно javadoc.
SEVERE: Servlet.service() for servlet jsp threw exception
java.lang.IllegalArgumentException: Negative time
at java.io.File.setLastModified(File.java:1258)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:376)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)
...
ОБНОВЛЕНИЕ: я скачал исходники для Tomcat и прочитал их. Соответствующий код из Compile.java:
375 File javaFile = new File(ctxt.getServletJavaFileName());
376 Long jspLastModified = ctxt.getLastModified(ctxt.getJspFile());
377 javaFile.setLastModified(jspLastModified.longValue());
ctxt - это JspCompilationContext, который услужливо возвращает -1 по умолчанию, если есть какие-либо ошибки, и File выдает IllegalArgumentException из отрицательного аргумента. Я до сих пор не знаю, почему я получаю ошибку, по крайней мере, я знаю, откуда исходит IllegalArgumentException.