All,
I've disovered the cause of my problems with the Ant build using the JspC task. I'm documenting the workaround here for anyone else having similar problems.


I thought that the JSP Ant build was successful even though I was seeing errors with runtime compilation in Tomcat because Ant was reporting a BUILD SUCCESSFUL. However, after checking the generated *.java files, I found that the same files that were causing Tomcat to fail were also failing in Ant, only quietly. The JspC task was creating zero-length Java files that Javac was then quietly ignoring. This is because of two problems below:

1) Apache bug #25452 ((http://issues.apache.org/bugzilla/show_bug.cgi?id=25452), where the Ant build is not notified if there are any JspC compile issues. Instead it creates zero-length Java files.

2) I didn't have my commons-logging-api configured correctly. I strongly recommend adding the following to your Java command in your Ant shell script to ensure proper error logging during JSP compiles:

-Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog -Dorg.apache.commons.logging.simplelog.defaultlog=info -Dorg.apache.commons.logging.simplelog.showdatetime=true

These properties will tell JspC to use the SimpleLog class which sends its log messages to stderr. You might still get a BUILD SUCCESSFUL report from Ant, but a human can look back through the build output and see any error messages. Also, you can do a check for empty Java files. (example "find builddir -name \*.java -empty")

I hope this helps, and thanks to R�my for looking!
Larry Karnowski

Remy Maucherat wrote:
Larry Karnowski wrote:

All,
I'm getting error messages while compiling JSPs at runtime inside Tomcat but not when I compile the same JSPs with the <jasper2> Ant task.


I've upgraded my Ant build to use the new <jasper2> tag (the org.apache.jasper.JspC class) instead of the old <jspc> tag that came with Ant. (It doesn't work with Tomcat 5.0.16.) All my JSPs compile fine with the new class.


<jspc> and <jasper2> are the same, as long as the task classname is the same :) So you should be able to rename jasper2.

However, when I actually put the JSPs in my webapp for Tomcat to compile, I get a few compilation errors. Note that I'm compiling my JSPs as a quality assurance step, not to ship precompiled Java classes.


This is a very good practice. It does allow detecting many trivial errors much faster.

I'm trying to find errors at build time rather than run time.

The problem comes with a poorly-coded JSP include action like this:

<jsp:include page="/asset/search.jsp" flush="false" >
</jsp:include>

I'll be the first to admit this is poor style, and I'm not too upset that Tomcat won't compile it. I can easily fix it by removing the trailing tag and making it an empty tag. However, my normal method of finding these types of errors is failing me -- my Ant JSP build.


Standard JSPs are not XML. Maybe that's the problem. You should post the error you're getting, BTW.

This is my build.xml snippet:
<jasper2
   uriroot="${install.servlets}"
   webXmlFragment="${root.build}/jspc/generated_web.xml"
   outputDir="${root.build}/jspc"
   package="org.apache.jsp.oculan"
/>

This is the error message I get from Tomcat:
Expected "param" tag with "name" and "value" attributes

I've started combing through the Jasper code to find what's different when compiling inside Tomcat as opposed to inside Ant. I've looked through all the top-level Jasper wrappering code that gathers the compilation options, but nothing seems significantly different. None of the compile options seem to be relevant to this issue.

There must be something going on deeper in the actual JSP compilation code. Does anyone have any idea what's happening?




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to