Tomcat在我的项目中为类显示NoClassDefFoundError

时间:2011-11-16 13:01:59

标签: java tomcat intellij-idea vaadin

我有一个使用JIRA的SOAP API的Vaadin项目。它在Eclipse中运行良好,但试图让它在IntelliJ和Maven中工作正在慢慢让我发疯,尽管我觉得我已接近完成。

每当我将我的应用程序部署到本地Tomcat服务器时,我得到的就是由此引起的堆栈跟踪:

java.lang.NoClassDefFoundError   
be.azvub.jira.service.JiraSoapServiceServiceLocator.getJirasoapserviceV2(JiraSoapServiceServiceLocator.java:53)

这个类存在,因为自从我将它们从eclipse移开后没有任何变化,因为我可以打开.java文件并看到那里没有错误。我可以删除调用这个类的代码,并且一切都很好,所以这是一个本地化的问题。问题类与我的Application类(仍然有效)位于不同的包中,在该类中调用它。

是什么导致了这个问题,我该如何解决?

3 个答案:

答案 0 :(得分:1)

我不知道我是怎么做到的,但通过修复一个不相关的问题,这个问题随之解决了。

我在File |下更改了Web资源目录项目结构| Facets(所以应用程序可以在WebContent目录下找到Vaadin的主题文件夹,而不是它设置的默认src / main / webapp)这两个文件夹实际上都没有给我带来问题的类。

我也强迫Maven重新导入所有内容,就像之前我做过几次一样,但是现在我在Project Explorer的项目上下文菜单中使用了这个选项,而不是Maven Projects选项卡,所以也许这样做有所不同? Maven对我来说仍然很大程度上是伏都教,但至少现在一切似乎都正常。

但无论如何,谢谢你的帮助。

答案 1 :(得分:1)

我有同样的问题并在调试后立即修复...

IntelliJ通常会在项目内的/ src文件夹下自动创建一个文件夹/ lib,然后它会告诉你的项目所有LIB都在那里,在此基础上;我们通常认为它也是放置所有LIB的地方。

虽然使用该设置,您的项目可以正常编译,因为IntelliJ可以链接到您的JAR但是,使用这种设置Tomcat将无法执行,因为Tomcat希望在/ WEB-INF / lib下找到类,... 。

因此,解决方案是:

  

1)从/ src / lib拖动你的LIB文件夹(对不起,我的意思是" / lib")   在/ web / WEB-INF目录下

     

2)你会收到关于移动课程/ JAR的警告,比如YES。

     

(您需要告诉您的项目重新映射现有的预定义   LIB到新文件夹):

     

3)从主菜单中选择FILE - >项目结构

     

4)选择   左侧菜单中的库

     

5)如果您没有看到任何现有的库,那么您已完成,请单击确定

     

6)如果你确实在那里看到了libs,那么:

     

7)点击每个LIB   中间列表,然后删除那些无法找到的,

     

8)从新位置重新添加它们

     

9)对所有其他LIB重复(7)。

     

10)好的,

重新编译,你的项目现在应该在Tomcat上部署并正常工作。

此致 海德

答案 2 :(得分:0)

我的猜测是构建路径,检查你正在调用的类是否存在于项目的构建路径中。