具有maven依赖性的Java ClassNotFoundException

时间:2012-10-10 03:05:02

标签: java maven noclassdeffounderror classnotfoundexception

当我尝试使用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文件夹中。我可以在代码中访问类,但是一旦运行应用程序,我就会得到提到的异常。

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

Java build path

我的本​​地maven存储库已添加到我的类路径中:

screenshot

当我尝试运行应用程序时,我得到以下两个例外:

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

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

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

7 个答案:

答案 0 :(得分:34)

provided更改为compile

<强>提供

  

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

答案 1 :(得分:9)

<scope>provided</scope>

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

您的依赖关系似乎不属于“提供”范围。从您的依赖关系定义中删除该范围,并且jar将出现在打包的jar / war / ear中。

答案 2 :(得分:1)

我遇到了同样的问题但我没有在我的POM上定义标签,它总是工作正常,直到有一天突然开始在我的本地机器上无缘无故地给我这个错误,依赖是在POM中正确设置,jar存在于本地maven存储库中。

我尝试清理项目并更新maven项目,但没有,其他帖子上建议的其他解决方案都没有为我工作。

我终于可以通过转到服务器标签来解决它 - &gt;右键单击Tomcat v8.0 - &gt;浏览部署位置

这会引导您进入像

这样的临时文件夹

.metadata.plugins \ org.eclipse.wst.server.core \ TMP1 \ wtpwebapps

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

复制它

重新启动服务器,它再次开始正常工作。

我希望这可以帮助一些人面对同样的问题。

答案 3 :(得分:0)

添加以下依赖项,它将解决问题。

<!-- https://mvnrepository.com/artifact/info.cukes/cucumber-jvm-deps -->
<dependency>
    <groupId>info.cukes</groupId>
    <artifactId>cucumber-jvm-deps</artifactId>
    <version>1.0.3</version>
    <scope>provided</scope>
</dependency>

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

我也遇到了同样的问题,在尝试了各种解决方案后,问题是通过以下步骤解决的...

  1. 点击服务器>打开启动配置>参数(复制 “LocalPath\temp0\wtpwebapps”路径)。

  2. 转到“LocalPath\temp0\wtpwebapps\ProjectName\WEB-INF\lib”。

  3. 从 .m2 复制 JAR(导致 ClassNotFoundException)并将其放置在“LocalPath\temp0\wtpwebapps\ProjectName\WEB-INF\lib”路径中。