在項目中進行添加操作時需要將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,該文件處于javaEE5Libraries
目錄下的jsf-impl.jar文件下。之所以在本地能夠運行通過是因為兩者實現的功能類似,都是通過反射將VO中的值賦值給PO,但是javaEE5Libraries
是javaee的包,只要建立web項目時就需要,但是在將項目打包時卻并不會將該目錄下的包打包進項目中,因此將項目單獨放在tomcat下執行時會出現該包找不到的異常,commons-beanutils.jar是用戶編寫代碼時必須引入的包,因此在打包時必須打包進項目中。
三.疑問1.為什么使用jsf-impl.jar文件下的com.sun.apache.commons.beanutils.BeanUtils也可以使用BeanUtils.copyProperties(PO,VO),雖然是在服務器上報錯,但是在myeclipse中確實沒有錯誤;
2.javaEE5Libraries中的jar包和jdk的jar包有什么區別;
3.本地有java環境,然后服務器上也有java環境,那么在服務器上為什么就不能找到com.sun.apache.commons.beanutils.BeanUtils?
四.總結雖然問題解決了,但是對于這個我還是不太理解,可能分析的時候也有錯誤,希望看到的大牛們能解惑一下,先謝謝了。
另外這個也暴漏出一個寫代碼的問題,前后引入的包都不一樣我竟然還能繼續寫下去,真是服了我自己了,以后寫代碼真的更用心了。
新聞熱點
疑難解答