我的java.lang.NoClassDefFoundError问题及其解决

来源:互联网 发布:ichart.js下载 编辑:程序博客网 时间:2024/05/22 13:04


拟使用BCE的SMS服务,于是下载了其SDK,加入到我的Portlet里面。出现java.lang.NoClassDefFoundError的错误,费了2-3天来排查。一下为一些记录。


增加JAR包的路径到环境变量: 不行!

如链接所说的单独建立一个目录并做相关处理:不行!

         解决办法

         1.项目根目录下新建一个libs文件夹

         2.把要加的包放到这个目录下

         3.右键 Build Path-> Use as source folder

         4.在jar包上右键->add to build path


Clean: not work: 不行!

User Libraries: added to this, try: 不行!

项目下的bce_jar 目录删掉不行.

3rd parties' lib not included? 第三方的也都加入了项目的BCE lib里面。: 不行!
Java Build Path: Ordre and Export : 加入了库(自己加入的库)bce: 不行!


文章(链接在这儿): 解决 使用了maven的项目中的 java.lang.NoClassDefFoundError: ....

加入项目目录WEB-INF\lib ,直接从bce库下面拖过去就可以:至少编译成功了!而且网站可以正常启动了。

初步看和BCE相关的错误没有了!错误变更成如下的:

11:52:04,615 ERROR [http-bio-8080-exec-4][render_portlet_jsp:132] null
java.lang.ClassNotFoundException: com.google.common.base.Preconditions


但是,再运行的对应的功能SaveValue的时候,出现的错误提示如下:(错误变了。)

11:56:11,874 ERROR [http-bio-8080-exec-10][PortletServlet:116] javax.portlet.PortletException: java.lang.NoClassDefFoundError: Could not initialize class com.baidubce.services.sms.SmsClientConfiguration
javax.portlet.PortletException: java.lang.NoClassDefFoundError: Could not initialize class com.baidubce.services.sms.SmsClientConfiguration

在生成的WAR包里面,WEB-INF目录下,出现了对应的JAR包(bce-java-sdk-0.10.4.jar)。至少是更正确了一步。还是从上述文章得到的启发

猜测出现上面的问题,可能是BCE的第三方JAR包没有代入。于是把所有BCE第三方JAR包,都放入了WEB-INF\lib目录下,重新编译发布。可以运行并返回默认页面了。不出现“不可用的portlet”提示了!至于手机能否收到SMS,则是另外的问题了(有大量DEBUG信息可用)!(后记:已经正确发送短信。)


初步结论:Eclipse中的项目中的WEB-INF\lib目录下应该有第三方的JAR包作为库,生成的WAR包将包括这些JAR,这样才能正常运行。



(后记:在胡启稳的教程的下一节,第19课 -  “ Struts2与Liferay的集成使用” 里面,就有将第三方的JAR包,即Struts2的JAR包放入WEB-INF\lib的演示。早看到的话,就能省一些时间了!)




















0 0
原创粉丝点击