具有Maven依赖项的Java ClassNotFoundException

问题描述 投票:40回答:6

[当我尝试使用maven定义的依赖项运行应用程序时,出现ClassNotFoundExceptionNoClassDefFoundError异常。

我使用以下声明将我所涉及的jar的maven依赖性添加到我的pom.xml文件中:

<dependency>
    <groupId>spy</groupId>
    <artifactId>spymemcached</artifactId>
    <version>2.8.4</version>
    <scope>provided</scope>
</dependency>

这会将相关的JAR文件添加到Eclipse中的Maven Dependencies文件夹中。我可以访问代码中的类,但是一旦运行应用程序,我就会得到提到的异常。

在我的Java构建路径中,在Maven依赖项下引用了jar:

“

我的本地Maven存储库已添加到我的类路径:

“截图”

[当我尝试运行应用程序时,出现以下两个异常:

java.lang.NoClassDefFoundError: Lnet/spy/memcached/MemcachedClient;

java.lang.ClassNotFoundException: net.spy.memcached.MemcachedClient

有人能指出我正确的方向吗?

java maven noclassdeffounderror classnotfoundexception
6个回答
35
投票

provided更改为compile

提供

这很像编译,但是表示您希望JDK或容器在运行时提供依赖关系。例如,在为Java Enterprise Edition构建Web应用程序时,您将对Servlet API和相关Java EE API的依赖关系设置为提供的范围,因为Web容器提供了这些类。此作用域仅在编译和测试类路径上可用,并且不可传递。


10
投票
<scope>provided</scope>

“已提供”范围意味着依赖项仅应在编译阶段可用,并且它们将在运行时在其他地方可用,并且Maven不应将其与当前应用程序的其余jar和类打包在一起。

您的依赖性似乎不在“提供的”范围内。从依赖项定义中删除该范围,然后jar将出现在打包的jar / war / ear中。


1
投票

我面临着同样的问题,但是我没有在POM上定义标签,它一直可以正常工作,直到有一天突然突然无缘无故地给我本地计算机中的错误,依赖关系正确无误。在POM中设置,并且jar在本地Maven存储库中。

[我尝试清理项目并更新Maven项目,但一无​​所获,其他帖子上建议的其他解决方案也都没有对我有用。

我终于能够通过转到服务器选项卡来解决它->右键单击Tomcat v8.0->浏览部署位置

这应该会导致您进入一个临时文件夹,例如

。metadata.plugins \ org.eclipse.wst.server.core \ tmp1 \ wtpwebapps

然后您浏览到您的项目文件夹-> WEB-INF-> lib->在这里,我发现提供错误的库中的jar丢失了,所以我只是从.m2 \ repository复制了它

重新启动服务器,它再次照常工作。

我希望这可以帮助某些机构面对同样的问题。


0
投票

答案与您的问题有些相关,但仍然可以帮助他人。在我的情况下,仅将<scope>compile</scope>添加到依赖项是不够的。我还必须将<packaging>jar</packaging>添加到目标模块的pom。


0
投票

删除<scope>provided</scope>,或将provided更改为compile的作品


-1
投票

在依赖性下添加,它将解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.