2013-06-20 41 views
7

eclipse中的問題日誌顯示「在項目的構建路徑中檢測到週期....」任何想法如何擺脫這些循環依賴關係?我不知道哪些項目是相互依賴的。如何在eclipse中解決項目中不同模塊之間的循環依賴關係?

+0

你能複製/粘貼整個錯誤信息到你的問題嗎?注意:您可以通過右鍵單擊,選擇「屬性」並轉到「項目引用」來確定項目存在哪些依賴關係。 –

+0

另外,項目參考通常不是偶然設置的。你是否在使用構建系統,比如Maven? –

+0

我正在使用Ant構建系統。 –

回答

2

在項目設置中,您可以看到依賴關係,您可以執行的操作是刪除所有依賴關係並將一個dep依次添加。一個週期意味着你不應該這樣做。您的解決方案識別的類後,讓說你的大項目A爲二級項目B需要類CB1和CB1從項目中需要類CA1:

  • 移動類CB1在項目中刪除的依賴 - - >如果不創建更多的依賴關係,則可以工作。
  • 提取接口並使用非依賴接口(根據您的結構,您可能需要創建超類或更多接口)。
  • 的實施方式不同,您爲什麼需要從其他項目中具體學習?嘗試使用公共父類(如果有)
+0

對於使用超過2個插件(我們使用超過700個)並在合併期間獲取該錯誤的人的提示:如果您將進入清單(MANIFEST.MF) - >依賴項(選項卡) - >依賴項你在那裏分析「在依賴關係圖中查找循環」,它會告訴你哪裏有這些循環。因此,找出從哪裏開始會更容易。乾杯。 – mtfk

12

可以在蝕調整循環依賴嚴重性:

Preferences > Java > Compiler > Building > Build path problems > Circular dependencies 
+1

雖然沒有解決問題。它只是埋葬它。 –

+1

@ Joris:你所建議的是暫時解決這個問題。 Haan該應用程序可以正常工作,但稍後它可能會成爲一個更大的問題,因爲它可能會在應用程序中導致不需要的錯誤。 –

+1

謝謝兄弟!!!!我的問題不是與maven(從控制檯工作),但與愚蠢的Eclipse。 – MeIr

3

Eclipse的一個循環依賴表明有在Eclipse項目之間的buildpaths一個週期。

所以,如果你有5個項目,說A,B,C,d和E,然後循環依賴可能是:

  1. A需要在其積聚路徑B
  2. B需要d在它的構建路徑
  3. d需要一個在它的構建路徑

因此A->B->D->A是一個循環。

由於這個循環,Eclipse不知道首先編譯哪個項目。

您需要重構代碼才能刪除此循環依賴項。或者如果實際的代碼沒有這樣的依賴關係,則刪除不需要的構建路徑條目。

0

要了解普通Java項目之間的依賴關係,請參閱Project Properties | Java構建路徑|項目。如果您有J2EE項目,則在項目屬性|中有一個額外的設置項目參考。檢查所有項目的圖表,在一張紙(或屏幕)上建立圖表,看看你能做些什麼來打破這個循環。

通常情況下,一個健康的依賴關係圖具有星形的形式,核心項目包含公共資源,每個葉子項目實現一些特定的用戶功能。具體而言,核心實際上可能由若干相互依存的項目組成;相同的更大的葉子。

擺脫依賴週期的典型方式是合併幾個緊密結合的項目。

0

您可能必須重構項目或代碼本身。這可能是與您的應用程序包裝有關的問題。

0

我很久以前就遇到過這個問題,即使我忘記了我是如何解決這個問題的,當需要項目中的一個類從一個類通信到另一個時,我有了sendee在發送者中安裝一個java.lang.reflect.Method對象,它可以在沒有在發送者的代碼中聲明sendee類的情況下被調用。

我確定有這樣做的首選方式,例如讓發件人和服務員共享一個接口,但就編碼經濟性而言,這似乎是最簡單的。

正如其他答案似乎表明,這似乎不是一個真正的循環,而是Eclipse設計的人爲因素。

2

有三種方法去除Eclipse項目之間循環依賴,

1.Go到工程 - > Java的反編譯>建築 - >啓用項目特定的設置。
選擇構建路徑問題並給出警告作爲循環依賴的選項。

2.轉到project-> java構建路徑。在項目選項卡中,選擇該項目並刪除。

3.轉到您的META-INF文件夾,打開MANIFEST.MF。在MANIFEST.MF視圖選項卡中,您可以在「導入包:」列中看到循環依賴項目。
從列中移除項目。

第一個選項並不能真正解決錯誤。第二個和第三個選項是解決這種依賴性的正確方法。

相關問題