7

在带有 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

whilemxICanvas2D是一个接口。

4

4 回答 4

12

这很可能是因为您已将范围设置为system. 根据Maven 文档

系统

这个范围类似于provided除了您必须提供明确包含它的 JAR 之外。工件始终可用,不会在存储库中查找。

换句话说,如果您使用system; ,则在运行应用程序时不会将依赖项放在您的类路径中 你必须自己做。

使用其他范围之一,例如compile.

于 2013-09-07T07:17:17.237 回答
7

您是否在项目的“Web 部署程序集”中添加了“Maven 依赖项”。如果没有,添加如下:

右键单击您的项目-> 属性-> 部署程序集-> 添加-> Java 构建路径条目-> 下一步,然后您可以从那里添加“maven 依赖项”。然后构建并尝试运行您的应用程序。

于 2013-09-07T07:23:23.990 回答
1

由于您使用的是系统范围,这意味着 maven 将使用它来编译您的项目,您不会看到您的错误,但是,当您在 tomcat 中运行您的应用程序时,这与 maven 无关,并且 tomact 不知道您的依赖项在哪里是,解决它的一种方法是将所需的 .jar 复制到您的 tomcat/lib文件夹中。

通常您希望提供或编译范围,但是如果您有存储库,则使用这些范围。当您创建一个新的 mavenized 项目然后构建它时,maven 将在您的本地机器(c:/users/user/.m2/repository/)中为该特定依赖项创建一个 .jar。这将适用于您自己的项目。

于 2013-09-07T10:29:50.397 回答
0

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

于 2021-01-10T23:06:17.327 回答