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/)。 这适用于您自己的项目。