我有一个使用JIRA的SOAP API的Vaadin项目。它在Eclipse中运行良好,但试图让它在IntelliJ和Maven中工作正在慢慢让我发疯,尽管我觉得我已接近完成。
每当我将我的应用程序部署到本地Tomcat服务器时,我得到的就是由此引起的堆栈跟踪:
java.lang.NoClassDefFoundError
be.azvub.jira.service.JiraSoapServiceServiceLocator.getJirasoapserviceV2(JiraSoapServiceServiceLocator.java:53)
这个类存在,因为自从我将它们从eclipse移开后没有任何变化,因为我可以打开.java文件并看到那里没有错误。我可以删除调用这个类的代码,并且一切都很好,所以这是一个本地化的问题。问题类与我的Application类(仍然有效)位于不同的包中,在该类中调用它。
是什么导致了这个问题,我该如何解决?
答案 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)
我的猜测是构建路径,检查你正在调用的类是否存在于项目的构建路径中。