2014-05-16 193 views
5

我有兩個稱爲A和B的Java項目。它們都是部署爲war文件的web應用程序。我分別在Eclipse工作區中創建了它們。項目B在名爲MusicMapper的項目A中使用一個類。我在this post中建議將項目A添加到項目B的Eclipse構建路徑中。所以,現在項目B可沒有任何錯誤和類MusicMapper通過導入其B工程可以編譯B工程中可以看出:如何在兩個項目之間共享代碼?

import com.projectA.MusicMapper; 

一切似乎要被罰款之前,我啓動項目B的Web應用程序。然而,當我啓動了B項目,並呼籲在項目A引用MusicMapper類的代碼,我得到了以下運行時錯誤:

java.lang.ClassNotFoundException: com.projectA.MusicMapper 

所以這個錯誤似乎是由這是從項目A.進口unfound類com.projectA.MusicMapper引起由於我已經將項目A添加到項目B構建路徑和項目B編譯罰款沒有任何錯誤,爲什麼它在運行時報告這個錯誤?

我又辦法是:我已經使用以下Maven進口項目也試圖B的pom.xml

<dependency> 
     <groupId>com.projectA</groupId> 
     <artifactId>projectA</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <scope>system</scope> 
     <systemPath>/path/to/projectA.jar</systemPath> 
    </dependency> 

其中projectA.jar是jar文件,我從項目A.出口但它仍然給了我相同的ClassNotFoundException。如何讓項目A中的課程可以通過項目B使用?看來,我嘗試過的兩種方法都不行。

+0

你覺得這對你的答案:) – vkg

回答

5

首先,如果您有兩個項目都作爲戰爭部署,那麼將一個項目作爲依賴包含在另一個項目中並不是一個好主意。因爲你會在很多你沒有項目B.需要其他的東西被蒲凌

一個更好的辦法將是創建一個三Java項目可以說,「通用」這應該只是一個Java項目不是動態Web項目,應該編譯爲jar。將項目A和項目B之間共享的所有內容移到Common項目中。

現在回到你的問題只需在eclipse中的項目構建路徑中添加一些東西,並不意味着你已經在eclipse以外的項目中添加了依賴項。 Eclipse不會抱怨,因爲它可以解決和找到項目,因爲您添加在eclipse構建路徑中。您將不得不使用ant,maven或gradle等構建工具編譯公共依賴項目,並在構建war時將jar打包到war文件中。

如果你不想使用一個構建工具,一個簡單的路線就是將eclipse中的第三個項目導出爲jar。在從eclipse中導出war文件之前,將通用jar文件複製到項目A和項目B的WEB-INF/lib文件夾中。

我希望它能幫助:)

+0

感謝。所以我需要將'MusicMapper'類從項目A中移出並放入包裝在jar中的「Common」項目中。但是如果類MusicMapper對項目A的某些類有依賴性呢?另外,有沒有什麼辦法可以包含項目B的Maven pom.xml中項目A導出的jar?我如上所示嘗試過,但沒有成功。 – tonga

+0

很多問題:)是的,你應該把MusicMapper移到普通項目中。但是現在,如果您發現MusicMapper類有很多依賴關係,從而導致幾乎所有的項目A都反映了代碼中的糟糕設計。在這種情況下,你可能需要做一些重構來清理。現在回到maven。這裏很難解釋這一切。但是在構建maven期間它的基本概念將首先編譯通用項目併發布到當地的mvaen回購站。如果你已經正確定義了它的依賴關係,它將在打包你的web項目的戰爭時包含這個jar。 – vkg

+0

是的,我認爲如果'MusicMapper'對項目A的其他類具有很多依賴性,那麼這意味着設計是有問題的。我將嘗試爲項目A和B之間的公共共享類建立一個「通用」項目。但是另一方面,使用包含項目A和B的主Maven項目會有幫助嗎?這樣,我可能不需要將任何課程移至共同的項目。但缺點是我必須正確設置主Maven項目的pom.xml。我也看到有人用這種方式。 – tonga

相關問題