AntClassLoader无法强制转换为URLClassLoader

时间:2009-11-17 15:07:12

标签: java jsp ant

我有一个Ant任务用Jasper编译jsp文件。第一步是生成java文件:

<java classname="org.apache.jasper.JspC" fork="no" failonerror="true">
    <classpath refid="my.class.path" />
    <arg value="-uriroot" />
    <arg value="${apps}" />
    <arg value="-d" />
    <arg value="${jsp}" />
    <arg value="-p" />
    <arg value="my.package.jsp" />
    <arg value="-webinc" />
    <arg value="${apps}/META-INF/gen-mappings.xml" />
    <arg value="-webapp" />
    <arg value="${apps}" />
</java>

当我启动此任务时,我得到:

BUILD FAILED
java.lang.ClassCastException: org.apache.tools.ant.AntClassLoader cannot be cast
 to java.net.URLClassLoader
        at org.apache.jasper.compiler.JspRuntimeContext.<init>(JspRuntimeContext
.java:113)
        at org.apache.jasper.JspC.initServletContext(JspC.java:1257)
        at org.apache.jasper.JspC.execute(JspC.java:1118)
        at org.apache.jasper.JspC.main(JspC.java:243)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        ...

我该如何处理这个问题? 谢谢!

克劳迪奥

3 个答案:

答案 0 :(得分:2)

我认为你不应该像这样直接调用JspC。 Tomcat专门为此目的提供Ant任务,它可以为您做必要的类加载器体操

http://tomcat.apache.org/tomcat-6.0-doc/jasper-howto.html#Web%20Application%20Compilation

<jasper 
         validateXml="false" 
         uriroot="${webapp.path}" 
         webXmlFragment="${webapp.path}/WEB-INF/generated_web.xml" 
         outputDir="${webapp.path}/WEB-INF/src" /> 

答案 1 :(得分:1)

尝试

fork="true"

启动一个单独的JVM,而不是继承Ant JVM。

答案 2 :(得分:1)

发现问题。 对于Ant任务之间的错误依赖关系链,Web应用程序文件夹为空,没有任何JSP。 纠正了链并用一些JSP启动了jasper任务,一切正常。 感谢帮助。 克劳迪奥