我完全糊涂了。我有一个带有一堆自定义JAVA类的jsp应用程序。到目前为止,我已经能够在开发环境中进行开发,然后将我的JAVA类,JSP文件或我的数据库条目从开发转移到生产。 (两个不同的服务器。)
几天前,我的所有JSP文件都开始抛出编译错误。我对一些单元做了一些小改动,但没有对JSP文件进行过一些改动。所以我重新启动了Tomcat并再次尝试。我重新启动了Apache和Tomcat并再次尝试。我从生产服务器复制了类,重新启动了Tomcat并再次尝试。我一直在开发服务器上遇到错误。 (我几个月来没有对其配置进行任何更改。)
所以我创建了一个简单的测试应用程序,它只通过它们的构造函数启动了几个类。它在开发环境(使用旧类或新类)中失败,并且在生产环境中完美运行。就好像存在CLASS文件(WEB-INF / classes / booknowservices / * .class)之外的东西,编译器在获取单元的定义时使用了这些文件。
例如测试三个构造函数:
/* --------- constructor definitions from JAVA source -----
database: Constructor:
public BKDataServices (String currentHost)
utilities: Constructor:
public BKUtil (BKDataServices thisdatabase)
textservices: Constructor:
public BKTextServices(BKDataServices thisdatabase, BKUtil thisutilities)
--------------- */
BKDataServices database = new BKDataServices(serverName);
BKUtil utilities = new BKUtil(database);
BKTextServices pagetext = new BKTextServices(database,utilities);
产生编译错误
构造函数BKTextServices(BKDataServices,BKUtil)未定义
似乎BKUtil的基础定义可能是罪魁祸首 - 当我尝试将其作为参数传递时,我也会遇到错误:
// Establish the link between the database class and the utilities class.
database.setUtilities(utilities);
database.setUtilities((booknowservices.BKUtil)utilities);
BKDataServices类型中的方法setUtilities(BKUtil)不适用于参数(BKUtil) 无法从booknowservices.BKUtil转换为booknowservices.BKUtil
由于生产中一切正常(包括测试),我并没有完全停止,但我希望重新启动开发系统,以便我可以放心地更新生产服务器。
有关如何诊断这一点的任何想法将不胜感激。
我创建了一个CompileTest.jsp来演示这个问题。我还没有创建“空”类来分享,但如果需要,我会这样做。
谢谢,
DrDave
答案 0 :(得分:1)
听起来你在某个地方的类路径中有一个旧的JAR或类文件。
使用额外的VM选项-verbose:class
运行有问题的程序,例如
`java -verbose:class Whatever.whatever`
这将导致VM打印出它加载的每个类的转储以及它加载的源。特别是,请确保您的BKDataServices
和BKUtil
来自您期望的位置。
不太完整的替代方案是这样的:
public static void printResource (Class<?> c) {
String src;
ClassLoader cl = c.getClassLoader();
if (cl != null)
src = cl.getResource(c.getName().replace('.', '/') + ".class").toString();
else
src = "[null ClassLoader]";
System.err.println(c.getName() + " => " + src);
}
然后:
printResource(booknowServices.BKUtil.class);
printResource(BKDataServices.class);
等等,这将打印从中加载类的源.class文件,这样您就可以确保它们符合您的期望。 null ClassLoader意味着它是引导类加载器或基本类型。