2014-09-20 46 views
0

我在Tomcat的(7.0.55)的自定义WebappClassLoader这是在server.xml配置为定制的ClassLoader JSP编译错误

<Context allowCasualMultipartParsing="true"> 
    <Loader loaderClass="org.project.system.core.classloader.DynamicClassLoader" /> 
</Context> 

它的加载和一切都很好,但是当我打开它装载了类org.test.User这不是WEB-INF/classes目录下,但通过我的DynamicClassLoader中加载我得到这个错误JSP:

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 7 in the generated java file 
Only a type can be imported. org.test.User resolves to a package 

所以,我做了一些调试,并在每个loadClass的是检查打电话,如果我的课被加载,是的:就在这个错误消息之前,我看到我的调试信息:

Trying to load org.test.User found! 
Trying to load org.test NOT FOUND!! 
Trying to load org.test NOT FOUND!! 
Trying to load org.apache.el.ExpressionFactoryImpl found! 
Trying to load com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl found! 
Trying to load com.sun.org.apache.xerces.internal.impl.dv.dtd.DTDDVFactoryImpl found! 
Trying to load org.apache.el.ExpressionFactoryImpl found! 
org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 7 in the generated java file 
Only a type can be imported. org.test.User resolves to a package 

所以看起来,jsp编译器要求User类。但真正奇怪的是,如果我使用eclipse执行它,一切都正常!当然,输出看起来与错误消息相同。我仔细检查了eclipse和我的配置文件,但我没有看到任何区别。

你知道什么可能是错的吗?为什么它在eclipse中没有任何错误,但不在“正常”的tomcat安装中运行?请让我知道,如果你需要任何进一步的信息!提前致谢!

回答

0

JSP编译器有时处理类路径中可解析为package(目录)和class.class文件)的项目。如果您的类正在从JAR文件加载,请尝试从JAR文件中删除目录条目(当然,请保留.class文件)。

如果目录和类位于磁盘上,则可能需要将其吸入并重新命名包或目录。

Eclipse与独立版本的区别可能与Eclipse使用的不同部署描述符有关。你可能想看看Eclipse在做什么......可能会有一些稍微不同的配置或打包策略。

+0

这些名字就像在例子“org.test.User”中,所以应该不会有命名上的问题,应该如何? – user2084865 2014-09-23 17:22:46

+0

你也有'org.test.user.OtherClass'吗? – 2014-09-23 20:16:24

+0

是的,这个包里有多个类。 – user2084865 2014-09-23 21:00:04