2017-07-26 48 views

回答

3

我認爲你有一個關於你的Maven模塊的概念真正的問題。

JAR的設計目的不是爲了排除某些類被其他JAR使用時的類。

爲什麼在B JAR中,你不提供一種在運行時選擇要使用的實現類的方法嗎? 你可以通過多種方式來允許它:一個屬性,一個實現的接口等......
通過這種方式,你可以指定在客戶端應用程序中使用的類。
您應該根據客戶端類來實現API,而不是覆蓋類。


這並不意味着你不能用Maven做它,但它看起來錯綜複雜,不自然,容易出錯並且設計不好。
以下是使用Maven解決它的一些想法。

你可以配置Maven的JAR-插件指定類的包裝罐子排除:

​​433

Here是參考文檔。

但是通過這樣做,無論如何這個類在JAR中都是不可用的。
如果在B中需要替換的類別,它會使B JAR不能單獨工作。

您可以將JAR打包爲specific classifier以避免此問題。
你應該有這麼一個經典的jar包含所有東西,jar-for-a包含了除了這個着名的重複類之外的所有東西。

但是真的,我認爲你應該真的考慮你的設計。

+0

我只是將文件從B複製到A來解決問題 – georgewhr