我有一個maven multimodule項目,有一個父項目和一堆模塊。其中一個模塊是「主模塊」,其中包含所有庫。所有其他模塊都依賴於該模塊並使用提供的庫。所有模塊的Maven燈罩重新定位?
主模塊是一個Bukkit插件,可以將其他模塊作爲擴展加載。這些擴展都用它們自己的類加載器加載,但加載的類在加載器之間共享以便能夠相互依賴。他們也可以依賴其他Bukkit插件,因爲他們的父類加載器是Bukkit的PluginClassLoader,它也共享插件之間的加載類以允許交互。
這就是問題出現的地方:不同的插件可能會使用同一個庫,但該庫的類可能會被不同的類加載器加載,從而導致LinkageErrors和其他問題。
我的想法是通過maven-shade-plugin重新定位主模塊中的庫。只有主模塊使用的庫才能正常工作。但是,重定位其他模塊使用的庫會導致運行時ClassNotFoundExceptions,因爲這些模塊仍在搜索正常的包名稱而不是重定位的包名稱。 然後我試圖改變導入到重定位的包,但我的IDE(IntelliJ)沒有找到類。
有沒有人有關於如何解決這個搬遷問題的想法?或者可能在類加載問題上採用不同的方法?
我還沒有試過在一段時間內完成此操作。目前該項目已經進行了大量重組。我的問題中提到的主要模塊現在是一個單獨的Maven項目,模塊的其餘部分分爲3個不同的項目(modules-main,modules-extra,modules-prototypes)和一個沒有任何依賴聲明的獨立共享父項。所以模塊繼承它們的依賴關係,而不是父代。我認爲現在應該可以搬遷。 我仍然喜歡你爲IntelliJ提到的解決方案 – pschichtel