一.问题
在项目中进行添加操作时需要将VO对象中的内容添加到PO对象中,采用的方法是BeanUtils.copyProperties(PO, VO),使用此方法后可以将VO对象中对应的属性值赋值给PO对象,在本地使用myeclipse测试的时候运行正常,但是将项目打成WAR包放到服务器上运行时却出现了classNotFoundException:com/sun/apach/commons/beanutils/BeanUtils,也就是说BeanUtils类不存在,但是在自己引入的jar包中已经存在commons-beanUtils.1.x.jar,开始以为是该JAR包的版本的问题,下载最新的jar包之后仍然出现该异常,但是在项目中两处使用该jar包的地方,一处可以正常使用,但是另一处却不能正常使用,经比对发现两处的BeanUtils所引用的文件不相同,将不可以正常使用处的文件修改为可以使用的文件之后测试通过。BeanUtils应该引入的文件是org.apache.commons.beanutils.BeanUtils,引入的错误文件是com.sun.org.apache.commons.beanutils.BeanUtils。
二.分析
BeanUtils应该引入的文件是org.apache.commons.beanutils.BeanUtils,处于commons-beanutils.jar文件下,但是引入的错误文件是com.sun.org.apache.commons.beanutils.BeanUtils,该文件处于java EE 5 Libraries
目录下的jsf-impl.jar文件下。之所以在本地能够运行通过是因为两者实现的功能类似,都是通过反射将VO中的值赋值给PO,但是java EE 5 Libraries
是javaee的包,只要建立web项目时就需要,但是在将项目打包时却并不会将该目录下的包打包进项目中,因此将项目单独放在tomcat下执行时会出现该包找不到的异常,commons-beanutils.jar是用户编写代码时必须引入的包,因此在打包时必须打包进项目中。
三.疑问
1.为什么使用jsf-impl.jar文件下的com.sun.apache.commons.beanutils.BeanUtils也可以使用BeanUtils.copyProperties(PO, VO),虽然是在服务器上报错,但是在myeclipse中确实没有错误;
2.java EE 5 Libraries中的jar包和jdk的jar包有什么区别;
3.本地有java环境,然后服务器上也有java环境,那么在服务器上为什么就不能找到com.sun.apache.commons.beanutils.BeanUtils?
四.总结
虽然问题解决了,但是对于这个我还是不太理解,可能分析的时候也有错误,希望看到的大牛们能解惑一下,先谢谢了。
另外这个也暴漏出一个写代码的问题,前后引入的包都不一样我竟然还能继续写下去,真是服了我自己了,以后写代码真的更用心了。
- 1楼wxdlqw
- 什么乱七八糟
- Re: 李爱戴
- @wxdlqw,可能我描述有问题吧,给你造成困扰不好意思,你直接右上角就可以了