2013-05-30 92 views
2

这是问题, 我有这个项目X使用另一个项目Y的服务。 Y使用eclipse作为jar文件导出并添加到项目X构建路径中。那么碰巧在X中弹簧加载“classService”的类无法加载,因为在Y的StringEncryptorService中的remoteService的构造函数中初始化依赖性时出错。它在Y中的一个jar文件中提到了类的一些问题。没有编译错误,所以构建路径很好。感谢未来。任何答案将不胜感激类路径问题:NoClassDefException:

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 

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

编辑:我认为问题在于春天找不到通用编解码器。因为它位于Y项目的库中,所以我导出到Project X的项目可以做些什么,以便Project X中的spring可以扫描Project Y的库?或者专门用于common-codec.jar库。纠正我,如果我错了,如果我说错了。

答案:通过将jar复制到它或将它作为外部jar添加到项目中或将项目添加到Eclipse中的classpath中,将库显式添加到X的classpath中。因为我不想让库共codec.jar要始终项目Ÿ库,我们只是加入到项目X的应用程序的context.xml:

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

特别鸣谢:哈什·库马尔。感谢好友..


+0

它很高兴知道哪种语言。这是我知道的一个java,但我想知道是否有人应该标记它。我通常会为我自己的问题(作为二级/三级标签)做但不确定最佳做法。 – basarat

+0

对不起.. mybad ..我是新来的.. :) – Vik2r

回答

0

组织/阿帕奇/公/编解码器/二进制/ Base64是不是在你的项目中找到,请加在X项目的构建路径公地编解码器1.8.jar,另一种方法是,当你输出项目Y记住在项目Y中添加commons-codec-1.8.jar。

+0

第一个没有解决问题。我也导出了项目Y中的common-codec-1.8.jar,实际上是它的所有库,但它不能解决问题。运行tomcat时,我仍然有这个错误。 – Vik2r

+0

我的意思是我用Project Y输出common-code-1.8.jar .. – Vik2r

0

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

Harish

+0

你是什么意思库?你的意思是tomcat库吗?我将它添加到Project X的构建路径。 – Vik2r

+0

按库我的意思是需要的jar文件(项目Y jar文件和commons codec jar文件)。你是将项目作为war文件部署还是仅仅使用eclipse,并且在其上挂载了tomcat来热部署代码?我曾经与一个项目合作,maven用于构建依赖项目,然后下载这些项目,并与其中的所有库进行最终的战争。但是为了开发,我们用来更改eclipse上的代码,并且tomcat能够接受它(而不是所有的东西)。所以代码在eclipse中运行和调试。 –

+0

我还没有将它部署为战争文件。我仍在做开发和测试。我只是使用eclipse并运行tomcat并检查localhost中的视图。我在日食中运行它,是的。 – Vik2r