Tempo negativo do compilador JSP
O que pode estar causando um erro como esse? Javadoc para File.java diz que lançará essa exceção se for passado com um valor negativo. Portanto, a questão é: por que o jaspe está passando com um valor negativo? Procurei as fontes de jaspe, mas não encontrei as que correspondam exatamente ao que estou executando, os números das linhas não são exatamente iguais. A versão que defini a hora da última modificação de File.lastModified, que nunca deve retornar um valor negativo, de acordo com o javado
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)
...
UPDATE: baixei as fontes do Tomcat e li as fontes. O código relevante do Compile.java é:
375 File javaFile = new File(ctxt.getServletJavaFileName());
376 Long jspLastModified = ctxt.getLastModified(ctxt.getJspFile());
377 javaFile.setLastModified(jspLastModified.longValue());
ctxt é um JspCompilationContext, que retorna -1 por padrão, se houver algum erro, e o File lança IllegalArgumentException a partir de um argumento negativo. Ainda não sei por que estou recebendo um erro, pelo menos sei de onde vem a IllegalArgumentException.