我怎样才能解决NoClassDefFoundError?

时间:2012-06-13 17:53:40

标签: java oracle weblogic noclassdeffounderror jdeveloper

我在Oracle Linux上安装了Oracle Weblogic 11g,并尝试使用jdeveloper 11g完成Oracle的ADF教程之一。当我运行我的项目时,它成功编译没有错误。它开始将应用程序部署到weblogic服务器,并打开我的默认Internet浏览器。但随后出现错误“500内部服务器错误”。

我收到以下错误:

java.lang.NoClassDefFoundError: Could not initialize class org.apache.myfaces.trinidadinternal.convert.ColorConverter at....

我研究了这个问题的互联网,我也问了一下,常见的答案是类路径有问题。可能jdeveloper中使用的库在weblogic中是不同的,然后部署项目。

任何人都可以判断问题肯定是类路径吗? 如何设置jdeveloper以将其使用的相同类路径部署到weblogic服务器?

4 个答案:

答案 0 :(得分:3)

java.lang.NoClassDefFoundError表示类路径中类的运行时版本与 compile 时的类不同。

您的问题可能是在部署服务器时找到的类的多个版本。我注意到org.apache.myfaces.trinidadinternal.convert.ColorConverter

中的课程trinidad-impl.jar

您可以搜索在运行时服务器环境中找到多少个此类jar以及您自己的webapp库吗?

在Windows上,Jdev内置服务器在此文件夹中运行

C:\ Users \< ...> \ AppData \ Roaming \ JDeveloper \ system11.1.1.4.37.59.23或类似的东西

你需要在webapp / WEB-INF / lib中使用它,而不是在其他区域。

在我的本地,我在C:\ Users \< ...> \ AppData \ Roaming \ JDeveloper \ system11.1.1.4.37.59.23 \ o.j2ee.wlLibs \ jsp \ Trinidad-Components1下找到了Jar。 2.war

我认为你可以使用weblogic.xml设置强制WEB-INF / lib类优先加载到server / lib中

    <container-descriptor>     
<prefer-web-inf-classes>true</prefer-web-inf-classes>   
</container-descriptor> 

答案 1 :(得分:2)

当您尝试加载试图加载另一个不在类路径上的类的类时会发生这种情况。找出ColorConverter需要哪些类,并确保在类路径中有它们。

答案 2 :(得分:1)

首先:你在部署什么到服务器? ADF jar或WAR文件。在您的情况下 - 假设您没有在应用程序服务器上安装任何依赖jar。您应该部署WAR文件。

在您的视图项目上 - 右键单击​​并选择“项目属性”。然后转到部署并编辑部署配置文件(如果没有,则创建一个)。确保选中“包含其他项目中的库”复选框。 (IT在“库依赖关系”选项卡中)。

另外:您可以在here中找到一些有用的信息。

希望这会有所帮助。 迈克尔

答案 3 :(得分:0)

使用StackTrace你可以找到遗漏的classes。我想你错过了一些jar,它应该在你的类路径中。