我正在爲由多個Maven模塊組成的庫編寫擴展。我需要在一個模塊的頂部添加一些功能,但不希望添加不必要的依賴關係,以防有人想在不使用我的擴展的情況下使用此模塊(典型用例)。如何將運行時依賴添加到另一個模塊?
我能想到的一個解決方案是用我的擴展創建另一個模塊,並嘗試使用反射從其類中調用方法。將會有這樣的檢查:
try {
Class.forName("my.package.Foo", false, getClass().getClassLoader());
// extension will be enabled and some method will be called using reflection
} catch(ClassNotFoundException e) {
// extension will be disabled
}
該類的方法只有在類路徑上纔會被調用。如果你在其模塊上添加Maven依賴項(除了它擴展的模塊的依賴關係外),那麼可以激活該擴展。
但這聽起來不像是最好的方法。有沒有更好的解決方案來解決這個問題?