Eclipse相关错误导致web项目发布异常问题原因分析及解决方案

来源:互联网 发布:卷皮淘宝客源码 编辑:程序博客网 时间:2024/06/03 11:54

问题背景

已经成功发布到tomcat(前端请求几个接口,都能够正常工作)的项目,再次发布之后报错。

在实现第一版接口之后,我把全部源码用git管理,并Push到服务端。随后,我修改了某一个java文件,在其中加了一行绝对不影响功能、逻辑的代码,保存之后,eclipse突然报错,一片标红,错误提示是整个java类中,引用到的其他类都找不到。类似于:

The import imp4sep.po.User cannot be resolved

Exception cannot be resolved to a type

因为在add和commit的时候,git在控制台输出信息显示,会对换行符进行转化。所以我猜测是换行符的问题。多次无目的性地尝试之后,我想,可能是新增的那一行代码的换行符是Windows风格的,而其他行的换行符是被git转换为Unix风格的,所以导致问题的出现,于是我将那行代码的末尾字符用delete键删除,然后重启了eclipse,刚刚找不到类的标红信息消失。

于是我合理猜测是换行符导致该问题。为此,我还重装了git,但是之后的add依然会提示换行符转换。虽然有点担心,但是还是没有报错。

但是这却是巧合造成的假象:标红的消失,发生在手动删除结尾换行符字符串之后,让我认为问题原因在换行符,但实际上,标红的消失仅仅是巧合,当然,它的出现也是巧合。

错误现象描述

再次碰到这个问题:

发布到tomcatwebapps目录下的项目文件,“修改日期”突然变成两周前的日期,前端初次请求之后,初始化的时候就抛异常。异常信息摘取如下:

ERROR [http-nio-8080-exec-2] - Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in file [D:\Apache\apache-tomcat-9.0.0.M18\webapps\imp4sep\WEB-INF\classes\spring\spring-dao.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: imp4sep/po/GeologicalDrillingSamplingInfo2Example

原因分析

找不到类的原因可能有多种:

l  tomcat webapps中的编译版本与工程当前的编译版本不一致;

l  源码的路径不在classpath中;

l  没有添加相应的依赖(jar包没有添加到构建路径);

首先,到tomcatwebapps下查看该类的class文件是否存在,发现该文件确实不存在,然后确定该类的源码java文件是否存在,发现源码存在。

尝试将tomcat中已经发布的工程clean掉,无效;

尝试将tomcat的工作目录clean掉,还是无效;

查看了DeploymentAssembly和Java BuildPath的设置都是没有问题的(MavenDependencies存在,Order andExport中也勾选了全部源码所在路径和MavenDependencies),基本可以排除Maven的问题,也可以排除上述第二条原因。但是我还是尝试用Maven的clean命令清理target目录。仍然无效;

重启eclipse,无效;

对源码文件作一些不影响功能和逻辑的修改(比如加一行注释),保存,利用自动发布功能去更新tomcat webapps下的class文件。无效;但是发现一个现象:只有刚才修改的java文件被发布,其他类和包都没有被发布

解决方案

排除其他可能原因之后,最后的问题应该就在于eclipse本身。在网上搜索这个错误提示,发现是Eclipse的相关的查找项目类型策略所致。

解决方案是:点击菜单栏“Project”-“Clean…”,如下图所示:


当然,原因不只着一种,其他可能的原因可参考下述参考博客以及其中提到的参考引用。

 

其他参考:

http://blog.csdn.net/testcs_dn/article/details/39643119/


阅读全文
0 1
原创粉丝点击