2016-06-29 36 views
3

我目前正在嘗試使用maven模塊結構。 目前我有以下結構:如何禁止訪問依賴項的依賴

A -> B -> C 

其中A依賴於B和B取決於C和A,B,C是獨立的行家模塊。

B在某種程度上是否可能掩蓋它對C的依賴關係,以便A不能直接調用公共函數或從C實例化對象?

回答

3

您可以將B對C的依賴標記爲<optional>true</optional>。這將阻止Maven傳遞解決這種依賴關係,所以A不會過渡地依賴C.這意味着,當A被構建時,根本不會在其類路徑上具有C,除非A定義了對C的顯式依賴。

當然,如果A定義了對C的顯式依賴,Maven會添加它。 Maven是一個構建工具,而不是一個安全框架,它可以防止A明確地訪問C.

此外,<scope>provided<scope>具有不同的含義,但在傳遞依賴方面的工作方式類似。

+0

非常感謝,這工作完全是想要的。 – FelixZett

+0

不客氣。不過,請閱讀有關此功能的文檔。使用這可能意味着你沒有正確構建你的項目。也許更「Maveny」的方法是將B分爲兩部分:需要C(B1)的部分和不需要的部分(B2)。 A和B1將只是依賴於B2。 –

+0

我剛剛注意到,如果A得到一個接口的對象(在B中),它實際上是一個工廠中構造的C的一個實例(也在B中),將會有一個ClassNotFoundException – FelixZett