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: tomcat-user-unsubscribe@(protected)
For additional commands, e-mail: tomcat-user-help@(protected)