java.lang.NoClassDefFoundError:在eclipse maven中
在使用maven的eclipse中,我添加了一个依赖项作为本地jar文件,如下所示:
xyz-core xyz-core 0 system /home/xyz/xyz-core.jar
在这个jar文件中,我有一个在我的应用程序中使用的接口。
当我在tomcat服务器上运行我的应用程序它显示该接口的exception
Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener java.lang.NoClassDefFoundError: com/mxgraph/canvas/mxICanvas2D
而mxICanvas2D
是一个接口。
这很可能是因为您已将范围设置为system
。 根据Maven文档 :
系统
此范围与
provided
类似,只是您必须提供明确包含它的JAR。 工件始终可用,不会在存储库中查找。
换句话说,如果使用system
,则在运行应用程序时,依赖项不会放在类路径上; 你必须自己做。
使用其他范围之一,例如compile
。
您是否已将“Maven依赖项”添加到项目的“Web部署程序集”中。 如果没有,请按如下方式添加:
右键单击您的项目 – >属性 – >部署程序集 – >添加 – > Java构建路径条目 – >下一步,然后从那里添加“maven依赖项”。 然后构建并尝试运行您的应用程序。
由于您正在使用系统范围,这意味着maven将使用它来编译您的项目,但是,当您在tomcat中运行应用程序时,您将看不到错误,这与maven无关,并且tomact不知道您的依赖项在哪里是,解决它的一种方法是将所需的.jars复制到tomcat / lib文件夹。
通常,您希望提供或编译范围,但是如果您有存储库,则使用这些范围。 当您创建一个新的mavenized项目然后构建它时,maven将为您本地计算机中的特定依赖项创建一个.jar(c:/users/user/.m2/repository/)。 这适用于您自己的项目。