Mark, I have a working solution for pre-compiling jsp, that I am using successfully with all our tomcat installations. The target looks like :
<target name="jspc_preparse" description="Use Jasper2 to parse jsp into java"> <mkdir dir="${webapp.workdir}"/> <jspc srcdir="${webapp.rootdir}" destdir="${webapp.workdir}" failonerror="false" classpathref="jspc_parse.classpath" package="org.apache.jsp" compiler="jasper41"> <exclude name="**/WEB-INF/**"/> <exclude name="include/**"/> </jspc> <!-- Fix all the package names --> <replaceregexp match="^package org.apache.jsp.*;" replace="package org.apache.jsp;" > <fileset dir="${webapp.workdir}" > <include name="**/*.java" /> </fileset> </replaceregexp> </target> I then use <foreach> from antcontrib to iterate over the directories and compile them individually. Tomcat seems to accept all the resulting class files at runtime with no problems. Regards, Steph > -----Original Message----- > From: Steph Richardson [mailto:[EMAIL PROTECTED] > Sent: Friday, August 01, 2003 7:06 PM > To: Tomcat Users List > Subject: RE: Jasper, JSPC, Ant and Precompiling JSP's > > > > That is EXACTLY what I am trying to do today. I've tooled around in the ant code, > and it seems this is more of a jasper issue than > an ant one, because ant passes a long list of files to jasper, with the unwanted > pathnames that end up as part of your > package name. > > I'm pretty sure if you used something like <foreach> to iterate through the same > fileset that is being created in the > jspc task, and > called jspc for each directory individually, and used the package="org.apache.jsp" > attribute, then this would work - because then > jasper wouldn't know about you're own subdirectory. But this seems ugly so I haven't > actually done it yet. > > You can use the webapp element inside jspc, but then jasper doesn't know about your > <exclude> and so tries to compile some > fragment.jsp type include files, that are not really full jsp files, and so it > crashes on those ( this is my current > problem ). But > if all your included files are called .inc rather than .jsp then this may work. > <jspc > destdir="${webapp.workdir}" > failonerror="false" > classpathref="jspPreCompile.classpath" > package="org.apache.jsp" > compiler="jasper41"> > <webapp basedir="${webapp.path}"/> > <exclude name="**/WEB-INF/**"/> > <exclude name="include/**"/> > </jspc> > > > So now I'm trying to make an ant step or task to replace the first line of every > generated _jsp.java file with the correct package > name, between generating them and compiling them. > Plz met me know if you have something better. > > > Regards, > > Steph > > > PS - if you're from the same HMDC i know, I suspect the site you are trying to > pre-compile, is one I wrote last summer. > > > > > -----Original Message----- > > From: Mark R. Diggory [mailto:[EMAIL PROTECTED] > > Sent: Friday, August 01, 2003 5:19 PM > > To: Tomcat Users List > > Subject: Jasper, JSPC, Ant and Precompiling JSP's > > > > > > Hello, > > > > I've done my best to review the archives to resolve my problem, but I've > > not found a solution there so I'm posting it. > > > > I'm stuck back on Tomcat 4.1.24 (LE) and I'm encountering some issues > > with JSP Precompilation using Ant and JSPC. First let me outline my problem. > > > > Most messages I've read to date focus on using JSP recompiling to turn > > the JSP into Servlets stored in a WAR file and require generating a > > fragment web.xml file and including it into your web.xml, I AM NOT > > trying to do this. I want my JSP's to get precompiled into the work > > directory of Tomcat and used from there, the exact same way that Tomcat > > does it. This way afterward, if the jsp is modified, tomcat can still > > recompile it. > > > > > > I have the following jspc and javac tasks coded in my build.xml: > > > > <mkdir dir="/var/tomcat4/work/Standalone/localhost/Foo"/> > > > > <jspc srcdir="${deploy.home}" > > destdir="/var/tomcat4/work/Standalone/localhost/Foo" > > failonerror="false" > > compiler="jasper41"> > > <classpath> > > <!-- snip --> > > </classpath> > > <exclude name="**/WEB-INF/**"/> > > </jspc> > > > > <javac destdir="/var/tomcat4/work/Standalone/localhost/Foo" > > optimize="off" > > debug="on" failonerror="false" > > srcdir="/var/tomcat4/work/Standalone/localhost/Foo" > > excludes="**/*.smap"> > > <classpath> > > <!-- snip --> > > </classpath> > > </javac> > > > > > > Both tasks get completed successfully. I observe problems in the package > > names of the JSPC generated java files where the following is the case. > > > > /var/tomcat/webapps/Foo/Bar/Bam.jsp results in the package name > > > > package Bar; > > ... > > > > which becomes a problem when I try to access this JSP included into > > another, I get the following error > > > > java.lang.NoClassDefFoundError: org/apache/jsp/Bam_jsp (wrong name: > > Bar/Bam_jsp) > > at java.lang.ClassLoader.defineClass0(Native Method) > > at java.lang.ClassLoader.defineClass(ClassLoader.java:502) > > at java.lang.ClassLoader.defineClass(ClassLoader.java:431) > > at org.apache.jasper.servlet.JasperLoader.loadClass(Unknown Source) > > at org.apache.jasper.servlet.JasperLoader.loadClass(Unknown Source) > > at org.apache.jasper.JspCompilationContext.load(Unknown Source) > > at org.apache.jasper.servlet.JspServletWrapper.getServlet(Unknown Source) > > at org.apache.jasper.compiler.Compiler.isOutDated(Unknown Source) > > at org.apache.jasper.compiler.Compiler.isOutDated(Unknown Source) > > ... > > > > > > I read somewhere that work had been done on my version (4.1.24) to > > eliminate a naming conflict problem. I assume this is why there are now > > package names on my _jsp.java files. I find that when I let > > Tomcat/Jasper compile all my jsp's the java files *all* have the package > > name "org.apache.jsp" no matter what their directory. I assume that my > > compilation is conflicting with Tomcats because of the package naming > > differences. > > > > So, I've tried adding the following attribute package="org.apache.jsp" > > to the jspc task, but this results in even more problems because all the > > package names now look like: > > > > package org.apache.jsp.Bar; > > > > and when they are compiled, they end up in a separate directory > > > > /var/tomcat4/work/Foo/org/apache/jsp/Bar/Bam_jsp.java > > > > Any ideas or solutions out there would be really helpful for me. I just > > want to have Tomcat start out using my precompiled jsp's instead of > > initially compiling them itself. > > > > thanks > > Mark Diggory > > HMDC > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]