2013-05-30 89 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