2017-08-21 33 views
1

我有兩個兩個項目,我們稱它們爲項目A和B.項目A使用項目B作爲庫項目,項目B使用「庫.jar」。此庫不是由項目B導出的。但項目A使用的第三方庫可以使用項目B中的「library.jar」。Eclipse:即使庫jar沒有標記爲導出,爲什麼ProjectA的庫jar可以訪問庫-Bar的ProjectB庫?

這怎麼可能?

如果我在項目A中創建一個類,試圖引用這個確切的庫它不能導入這個庫,但一個導入的庫可以嗎?

它肯定是使用該庫,因爲如果我從Project B構建路徑中刪除庫,它將不適用於項目A中的庫。

+0

這些Eclipse插件項目是?普通的Java項目?你使用Eclipse本身來編譯一切嗎? – nitind

回答

1

導出意味着API不會導出裝置內部:

術語出口來自OSGi的/插件開發(見Eclipse help: Plug-in Runtime),並且是指能見度:導出構建類條目在構建路徑中具有該項目的項目中可見。 不會導出構建路徑條目是在上游項目構建路徑的一部分,但不可見(無法在源代碼中引用)。

Eclipse有自己的編譯器,它支持在編譯時模塊化(OSGi的開發,而是通過必需項目出口標誌也爲普通Java更簡單的方式提供)。如果你不使用OSGi,你將只有一個平坦的構建路徑,在運行時沒有模塊化。

+0

好的,那些沒有標記爲導出的庫基本上是隱藏的。他們在那裏,如果被引用會工作,但Eclipse只是不知道他們,因此會引發錯誤?我猜想這是有道理的。 – Mazen

+0

@Mazen是的,正好。 Eclipse在編譯時通過_required projects_(有或沒有_access rules_)和_export_標誌提供輕量級模塊化,但在運行時不會。 – howlger

1

「導出」標誌是IDE獨佔設置,用於正確管理項目的依賴關係。 在編譯時,可以使用classpath中的每個類,因此技術上您的項目A可以使用「library.jar」,但是您的IDE設置阻止您這樣做。