我正在嘗試使用適合於Java 9模塊系統的最佳實踐,這樣我就可以獲得更多的好處(現在我們的系統可以從一些模塊化中受益)。使用Java 9模塊,多個模塊是否可以導出相同的包?
在模塊A的當前標準下,是否允許導出包com.example.foo以及模塊B導出包com.example.foo?
作爲一個相關的問題,如果相關的話,這個點是實際上是結算還是還沒有最終。
我正在嘗試使用適合於Java 9模塊系統的最佳實踐,這樣我就可以獲得更多的好處(現在我們的系統可以從一些模塊化中受益)。使用Java 9模塊,多個模塊是否可以導出相同的包?
在模塊A的當前標準下,是否允許導出包com.example.foo以及模塊B導出包com.example.foo?
作爲一個相關的問題,如果相關的話,這個點是實際上是結算還是還沒有最終。
根據最新的State of the Module System,模塊系統確保「每個模塊最多讀取一個定義給定程序包的模塊,並且定義相同名稱程序包的模塊不會相互干擾」。並且:「當模塊中的代碼引用包中的某個類型時,那麼該包將保證在該模塊中或在該模塊讀取的模塊中的一個模塊中定義。」
這意味着,如果 - 在構建時和運行時 - 兩個不同的模塊可能導出相同的程序包 - 沒有模塊同時依賴於A和B,並且A和B不相互依賴。從理論上講,你可以有兩個模塊導出相同的包,並一次使用一個模塊。
正如已經提出的那樣,我還建議最好的做法是讓一個模塊(而不是兩個)導出一個包。
我想這意味着像一個具有多個可能的依賴項的日誌框架提供相同的類是可以接受的,但幾乎所有其他事情都需要一致地劃分。 –
不知道,但我懷疑你應該開始使用模塊做這樣的事情,因爲它仍然違反https://en.wikipedia.org/wiki/Package_principles(尤其是CRP中的「inseparable」) – zapl
我認爲你是指A和B都同時加載到同一個JVM中? – Jay
關閉此問題:鏈接的問題是關於非導出的包,而這個問題是關於導出的包。我相信差異是相關的。 – Jay