Hi Jeff!
Thanks for the fix. I found out the same solution in the meantime, but I'm
still struggling with another problem: I now added a tag file I created
myself and get weird errors from AntCompiler included in Jasper.
Here is my testdata:
index.jsp:
<%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
<html>
<body>
<h2><c:out value="Hello"/> <tags:test testAttribute="World"/>!</h2>
</body>
</html>
WEB-INF/tags/test.tag:
<%@ attribute name="testAttribute" type="java.lang.String" required="true" %>
${testAttribute}
The Ant JspC task can create the sources and compile them without any
problems. When I use Maven, the following stacktrace is created:
29.01.2006 16:53:53 org.apache.jasper.compiler.AntCompiler generateClass
SCHWERWIEGEND: Error compiling file:
/V:/Development/testWebapp/target/jsp-source//org/apache/jsp/tag/web\test_tag.java
[javac] Compiling 1 source file
29.01.2006 16:53:53 org.apache.jasper.compiler.AntCompiler generateClass
SCHWERWIEGEND: Javac exception
Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK
at
org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory.getCompiler(CompilerAdapterFactory.java:105)
at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:924)
at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:757)
at
org.apache.jasper.compiler.AntCompiler.generateClass(AntCompiler.java:219)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:288)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:267)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:255)
at
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:563)
at
org.apache.jasper.servlet.JspServletWrapper.loadTagFile(JspServletWrapper.java:200)
at
org.apache.jasper.compiler.TagFileProcessor.loadTagFile(TagFileProcessor.java:515)
at
org.apache.jasper.compiler.TagFileProcessor.access$000(TagFileProcessor.java:48)
at
org.apache.jasper.compiler.TagFileProcessor$TagFileLoaderVisitor.visit(TagFileProcessor.java:566)
at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1441)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)
at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2213)
at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2219)
at org.apache.jasper.compiler.Node$Root.accept(Node.java:456)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)
at
org.apache.jasper.compiler.TagFileProcessor.loadTagFiles(TagFileProcessor.java:584)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:169)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
at org.apache.jasper.JspC.processFile(JspC.java:953)
at org.apache.jasper.JspC.execute(JspC.java:1094)
at org.apache.jasper.JspC.main(JspC.java:231)
at org.codehaus.mojo.jspc.JspcMojo.execute(JspcMojo.java:154)
at
org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:415)
at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:531)
at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:472)
at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:451)
at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:303)
at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:270)
at
org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:139)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:322)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:115)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:249)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
29.01.2006 16:53:53 org.apache.jasper.compiler.AntCompiler generateClass
SCHWERWIEGEND: Env: Compile:
javaFileName=/V:/Development/testWebapp/target/jsp-source//org/apache/jsp/tag/web\test_tag.java
classpath=V:\Development\testWebapp\target\classes;D:\Dokumente und
Einstellungen\Andi\.m2\repository\taglibs\request\1.0.1\request-1.0.1.jar;D:\Dokumente
und
Einstellungen\Andi\.m2\repository\struts\struts\1.2.7\struts-1.2.7.jar;D:\Dokumente
und
Einstellungen\Andi\.m2\repository\commons-logging\commons-logging\1.0.4\commons-logging-1.0.4.jar;D:\Dokumente
und
Einstellungen\Andi\.m2\repository\displaytag\displaytag\1.0\displaytag-1.0.jar;D:\Dokumente
und
Einstellungen\Andi\.m2\repository\commons-lang\commons-lang\2.0\commons-lang-2.0.jar;D:\Dokumente
und
Einstellungen\Andi\.m2\repository\struts\struts-el\1.2.7\struts-el-1.2.7.jar;D:\Dokumente
und
Einstellungen\Andi\.m2\repository\javax\servlet\jstl\1.1.2\jstl-1.1.2.jar;D:\Dokumente
und
Einstellungen\Andi\.m2\repository\commons-beanutils\commons-beanutils\1.7.0\commons-beanutils-1.7.0.jar;D:\Dokumente
und
Einstellungen\Andi\.m2\repository\commons-collections\commons-collections\2.1.1\commons-collections-2.1.1.jar;D:\Dokumente
und
Einstellungen\Andi\.m2\repository\commons-validator\commons-validator\1.1.4\commons-validator-1.1.4.jar;D:\Dokumente
und
Einstellungen\Andi\.m2\repository\commons-digester\commons-digester\1.6\commons-digester-1.6.jar;D:\Dokumente
und
Einstellungen\Andi\.m2\repository\taglibs\standard\1.1.2\standard-1.1.2.jar;D:\Dokumente
und
Einstellungen\Andi\.m2\repository\itext\itext\0.99\itext-0.99.jar;D:\Dokumente
und
Einstellungen\Andi\.m2\repository\xml-apis\xml-apis\1.0.b2\xml-apis-1.0.b2.jar;D:\Dokumente
und
Einstellungen\Andi\.m2\repository\antlr\antlr\2.7.2\antlr-2.7.2.jar;
cp=v:\development\java\maven-2.0.2\core\boot\classworlds-1.1.jar
cp=V:\Development\testWebapp\target\classes
cp=D:\Dokumente und
Einstellungen\Andi\.m2\repository\taglibs\request\1.0.1\request-1.0.1.jar
cp=D:\Dokumente und
Einstellungen\Andi\.m2\repository\struts\struts\1.2.7\struts-1.2.7.jar
cp=D:\Dokumente und
Einstellungen\Andi\.m2\repository\commons-logging\commons-logging\1.0.4\commons-logging-1.0.4.jar
cp=D:\Dokumente und
Einstellungen\Andi\.m2\repository\displaytag\displaytag\1.0\displaytag-1.0.jar
cp=D:\Dokumente und
Einstellungen\Andi\.m2\repository\commons-lang\commons-lang\2.0\commons-lang-2.0.jar
cp=D:\Dokumente und
Einstellungen\Andi\.m2\repository\struts\struts-el\1.2.7\struts-el-1.2.7.jar
cp=D:\Dokumente und
Einstellungen\Andi\.m2\repository\javax\servlet\jstl\1.1.2\jstl-1.1.2.jar
cp=D:\Dokumente und
Einstellungen\Andi\.m2\repository\commons-beanutils\commons-beanutils\1.7.0\commons-beanutils-1.7.0.jar
cp=D:\Dokumente und
Einstellungen\Andi\.m2\repository\commons-collections\commons-collections\2.1.1\commons-collections-2.1.1.jar
cp=D:\Dokumente und
Einstellungen\Andi\.m2\repository\commons-validator\commons-validator\1.1.4\commons-validator-1.1.4.jar
cp=D:\Dokumente und
Einstellungen\Andi\.m2\repository\commons-digester\commons-digester\1.6\commons-digester-1.6.jar
cp=D:\Dokumente und
Einstellungen\Andi\.m2\repository\taglibs\standard\1.1.2\standard-1.1.2.jar
cp=D:\Dokumente und
Einstellungen\Andi\.m2\repository\itext\itext\0.99\itext-0.99.jar
cp=D:\Dokumente und
Einstellungen\Andi\.m2\repository\xml-apis\xml-apis\1.0.b2\xml-apis-1.0.b2.jar
cp=D:\Dokumente und
Einstellungen\Andi\.m2\repository\antlr\antlr\2.7.2\antlr-2.7.2.jar
work dir=V:\Development\testWebapp\target\jsp-source
extension dir=c:\java\jdk1.5.0_01\jre\lib\ext
srcDir=V:\Development\testWebapp\target\jsp-source
compilerTargetVM=1.4
compilerSourceVM=1.4
include=org/apache/jsp/tag/web/test_tag.java
The java file for the tag is created correctly, but it seems that it fails
compiling it.
Andi
> Hi Andreus,
>
> You found a bug in the jspc plugin. I just fixed it. So update your
> jspc plugin source and rebuild it. Its now up to version 1.3 (don't
> forget to update your pom to reflect v1.3).
>
> Thanks,
>
> Jeff
>
> Andreas Gabriel wrote:
>> Hello again!
>>
>> I've another question regarding th JspC plugin: I build a very simple
>> web app based on the webapp archetype and want to precompile the JSPs
>> with the plugin. I want to use tag libraries like JSTL. I tried to
>> compile a sample JSP with the following content:
>> <%@ page language="java" contentType="text/html"
>> pageEncoding="UTF-8"%> <%@ taglib prefix="c"
>> uri="http://java.sun.com/jsp/jstl/core"%>
>> <html>
>> <body>
>> <h2>Hello World!</h2>
>> </body>
>> </html>
>>
>> When I call the JspC plugin, the following error occurs:
>> [INFO] [jspc:compile {execution: jspc}]
>> [INFO] jspc args: [-uriroot,
>> V:\Development\testWebapp/src/main/webapp, -d,
>> V:\Development\testWebapp/target/jsp-source, -s, -l, -webinc,
>> V:\Development\testWebapp/target/web-fragment.xml, -p, jsp]
>> [INFO] V:\Development\testWebapp\target\classes
>> [INFO] D:\Dokumente und
>> Einstellungen\Andi\.m2\repository\tomcat\jasper-runtime\5.5.12\jasper-runtime-5.5.12.jar
>> [INFO] D:\Dokumente und
>> Einstellungen\Andi\.m2\repository\tomcat\jasper-compiler\5.5.12\jasper-compiler-5.5.12.jar
>> [INFO] D:\Dokumente und
>> Einstellungen\Andi\.m2\repository\taglibs\standard\1.1.2\standard-1.1.2.jar
>> [INFO] D:\Dokumente und
>> Einstellungen\Andi\.m2\repository\javax\servlet\jstl\1.1.2\jstl-1.1.2.jar
>> org.apache.jasper.JasperException: The absolute uri:
>> http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml
>> or the jar files deployed with this application
>>
>> My pom.xml looks like this:
>> <project xmlns="http://maven.apache.org/POM/4.0.0"
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
>> http://maven.apache.org/maven-v4_0_0.xsd">
>> <modelVersion>4.0.0</modelVersion>
>> <groupId>com.webapp</groupId>
>> <artifactId>testWebapp</artifactId>
>> <packaging>war</packaging>
>> <version>1.0-SNAPSHOT</version>
>> <name>Maven Webapp Archetype</name>
>> <url>http://maven.apache.org</url>
>> <build>
>> <finalName>testWebapp</finalName>
>> <plugins>
>> <!-- use Java 5 compiler settings -->
>> <plugin>
>> <groupId>org.apache.maven.plugins</groupId>
>> <artifactId>maven-compiler-plugin</artifactId>
>> <configuration>
>> <source>1.5</source>
>> <target>1.5</target>
>> </configuration>
>> </plugin>
>>
>> <!-- precompile JSPs -->
>> <plugin>
>> <groupId>org.codehaus.mojo</groupId>
>> <artifactId>jspc-maven-plugin</artifactId>
>> <version>1.2</version>
>> <executions>
>> <execution>
>> <id>jspc</id>
>> <phase>generate-sources</phase>
>> <goals>
>> <goal>compile</goal>
>> </goals>
>> </execution>
>> </executions>
>> </plugin>
>> </plugins>
>> </build>
>> <dependencies>
>> <!-- Servlet 2.4 / JSP 2.0 APIs -->
>> <dependency>
>> <groupId>javax.servlet</groupId>
>> <artifactId>servlet-api</artifactId>
>> <version>2.4</version>
>> <scope>provided</scope>
>> </dependency>
>> <dependency>
>> <groupId>javax.servlet</groupId>
>> <artifactId>jsp-api</artifactId>
>> <version>2.0</version>
>> <scope>provided</scope>
>> </dependency>
>>
>> <!-- JSTL implementation -->
>> <dependency>
>> <groupId>javax.servlet</groupId>
>> <artifactId>jstl</artifactId>
>> <version>1.1.2</version>
>> </dependency>
>> <dependency>
>> <groupId>taglibs</groupId>
>> <artifactId>standard</artifactId>
>> <version>1.1.2</version>
>> </dependency>
>>
>>
>> <!-- Jasper for compiling the JSPs -->
>> <dependency>
>> <groupId>tomcat</groupId>
>> <artifactId>jasper-compiler</artifactId>
>> <version>5.5.12</version>
>> </dependency>
>> <dependency>
>> <groupId>tomcat</groupId>
>> <artifactId>jasper-runtime</artifactId>
>> <version>5.5.12</version>
>> </dependency>
>> </dependencies>
>> </project>
>>
>> The web.xml looks like this:
>> <?xml version="1.0" encoding="UTF-8"?>
>> <web-app id="test" version="2.4"
>> xmlns="http://java.sun.com/xml/ns/j2ee"
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
>> http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
>>
>> <!-- [INSERT FRAGMENT HERE] -->
>>
>> <display-name>Archetype Created Web Application</display-name>
>>
>> </web-app>
>>
>> As standard.jar contains the file c.tld in the META-INF directory with
>> the tag library definition for the specified URI, the library should
>> be present in the classpath
>>
>> Thanks,
>> Andi
>>