类路径问题:NoClassDefException:

时间:2013-05-30 01:44:41

标签: java classpath noclassdeffounderror nested-exceptions

这是问题, 我有一个项目X使用另一个项目Y的服务。使用eclipse将Y导出为jar文件并添加到项目X构建路径中。碰巧在Spring中加载“classService”的类无法加载,因为在Y的StringEncryptorService中的remoteService的构造函数中初始化依赖项有问题。它说明了Y中jar中的类。没有编译错误,因此构建路径很好。谢谢你。任何答案将不胜感激

INFO: Initializing Spring root WebApplicationContext
ERROR org.springframework.web.context.ContextLoader:319 - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'classService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.package.common.security.StringEncryptorService com.package.service.classService.stringEncryptorService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'stringEncryptorService' defined in URL [jar:file:/C:/Users/user/git/project/Project/WEB-INF/lib/package-common-0.111.jar!/com/package/common/security/StringEncryptorService.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.package.common.security.StringEncryptorService]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/codec/binary/Base64

我使用了在Y项目中的commons-codec-1.8。我知道我可以将它的jar文件移动到Project X'引用的库中,但是我想知道我是否可以在Y中制作它以便当我制作其他项目时,说A,我可以将y作为jar导出到A。

编辑:我认为问题是春天无法找到共同的编解码器。因为它位于Project Y的库中,我导出到Project X的项目可以做一些事情,以便Project X中的弹簧可以扫描Project Y的库吗?或者特别是common-codec.jar的库。如果我错了,如果我说错了,请纠正我。

答案:要么将库显式添加到X的类路径,要么将jar复制到它或将其作为外部jar添加到项目中,或者将项目添加到eclipse中的classpath。因为我想让库common-codec.jar始终在Project Y库中,我们只是添加到Project X的application-context.xml中:

<bean id="StringEncryptorService" class="PackagePathInProjectY.StringEncryptorService"></bean>

特别感谢:Harish Kumar。谢谢巴迪..


2 个答案:

答案 0 :(得分:0)

在您的项目中找不到

org / apache / commons / codec / binary / Base64,请在X项目的构建路径中添加commons-codec-1.8.jar,另一种方法是在导出项目Y remeber时添加项目Y中的commons-codec-1.8.jar一起。

答案 1 :(得分:0)

在您部署的tomcat项目中,类路径肯定存在问题。你能检查WEB-INF / lib是否有这个库吗?如果你正在将项目部署为战争,那么在构建war或项目X时,两个库应该捆绑在一起,当war在tomcat上爆炸时,应该在类路径中找到Y库和commons编解码器。您可以将来自Porject Y的公共编解码器捆绑为构建的一部分。

哈里什