我正在为由多个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依赖项(除了它扩展的模块的依赖关系外),那么可以激活该扩展。
但这听起来不像是最好的方法。有没有更好的解决方案来解决这个问题?