繁体   English   中英

java.lang.NoClassDefFoundError:在eclipse maven中

[英]java.lang.NoClassDefFoundError: in eclipse maven

在使用 Maven 的 Eclipse 中,我添加了一个依赖项作为本地 jar 文件,如下所示:

<dependency>
    <groupId>xyz-core</groupId>
    <artifactId>xyz-core</artifactId>
    <version>0</version>
    <scope>system</scope>
    <systemPath>/home/xyz/xyz-core.jar</systemPath>
</dependency>

在这个 jar 文件中,我有一个在我的应用程序中使用的接口。

当我在 tomcat 服务器上运行我的应用程序时它显示该接口的异常

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 将在您的本地机器 (c:/users/user/.m2/repository/) 中为该特定依赖项创建一个 .jar。 这将适用于您自己的项目。

Eclipse 中很少有 Maven 无法正确清理和构建项目。 它对我有用,请按照以下步骤操作:
首先通过 Maven 清理您的项目。
在 Project Explorer 视图中,打开项目上的上下文菜单 > Run > Maven Clean
然后再次构建它。
在 Project Explorer 视图中,打开项目上的上下文菜单 > Run > Maven Build

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM