Java的ClassNotFoundException的使用Maven的依赖(Java ClassN

2019-06-18 11:50发布

我得到ClassNotFoundExceptionNoClassDefFoundError例外,当我尝试使用Maven的定义依赖于运行我的应用程序。

我将我的行家依赖于问题我的罐子里pom.xml用下面的声明文件:

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

这增加了相关的JAR文件在Eclipse中我的Maven依赖的文件夹。 我可以访问代码的类,但我得到的例外提到,一旦我运行应用程序。

该罐是在Maven依赖我的Java构建路径引用:

我的本地仓库被添加到我的类路径:

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

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

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

任何人都可以点我在正确的方向?

Answer 1:

更改providedcompile

提供

这很像编译,而是指你所期望的JDK或容器,以提供在运行时的依赖。 例如,建筑为Java企业版Web应用程序时,你会设置了Servlet API的依赖和相关的Java EE的API提供的范围,因为在Web容器提供的类。 该范围只在编译和测试类路径,而不是传递。



Answer 2:

<scope>provided</scope>

“设置”范围意味着依赖应该只在编译期可用,并且在运行期间,他们将可在其他地方和Maven不应该与当前应用程序的JAR和类的其余部分将它们打包。

你的依赖似乎并没有成为“规定”范围。 从你所依赖的定义删除范围和罐子将出现在您的打包JAR /战争/耳。



Answer 3:

我面临着同样的问题,但我并没有对我的POM定义的标签,它总是工作正常,直到有一天忽然开始给我在我的本地机器的错误没有理由,依赖被正确设置在POM和瓶子是存在于本地Maven仓库。

我试图清理项目和更新Maven项目,但没有,没有任何其他解决方案的其他职位建议对我也工作过。

我终于能够通过进入服务器标签来解决这个问题 - >右键点击的Tomcat 8.0 - >浏览部署位置

这应该带你到一个临时文件夹一样

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

您在浏览到您的项目文件夹 - > WEB-INF - > LIB - >在这里,我发现,从已给错误的库罐子不见了,所以我只是从.m2目录\库复制它

重新启动服务器,并开始像往常一样再次合作。

我希望这有助于一些机构面临着同样的问题。



Answer 4:

下面添加依赖关系,这将解决此问题。

<!-- 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>


Answer 5:

答案有点关系到你的问题,但仍可以帮助别人。
添加<scope>compile</scope>的依赖关系是不够的,在我的情况。 我还不得不添加<packaging>jar</packaging>到目标模块的POM。



文章来源: Java ClassNotFoundException with maven dependency