我想知道是否可以在 Maven 中实现如下的接口项目。
Project-A 和 Project-B 具有相同的类,在 Project-C 中实现接口。Project-Z 仅使用 Project-I(POM),其中包含 Project A、B、C 作为模块。
我想使用配置文件机制,以便 Project-Z 使用 Project-A 或 Project-B 的实现。
如果您认为可能,请给我一个简单的例子。
谢谢。
我想知道是否可以在 Maven 中实现如下的接口项目。
Project-A 和 Project-B 具有相同的类,在 Project-C 中实现接口。Project-Z 仅使用 Project-I(POM),其中包含 Project A、B、C 作为模块。
我想使用配置文件机制,以便 Project-Z 使用 Project-A 或 Project-B 的实现。
如果您认为可能,请给我一个简单的例子。
谢谢。
您可以使用 java SPI(服务提供者接口),两个实现 jar 通过它在清单中声明相同的服务。使用应用程序可以进行查找、迭代并选择一个。(我现场没有找到一个简单的例子。)
如果你真的想用一个 Maven 配置文件来做这件事,最简单的方法是你可以在配置文件中设置一个带有类名的属性。然后在运行时实例化这个属性中的类。
<profile>
<id>a</id>
<properties>
<myproject.componentX.implementation.class>com.foo.bar.BazA</myproject.componentX.implementation.class>
看起来可能很奇怪,为什么你想在构建时在根 pom 中这样做......也许你打算不经常改变它。有更好的方法,取决于你打算做什么。
你能解释一下在什么情况下你想改变它,为什么以及多久改变一次?