【问题标题】:Maven: Programming to Interface ProjectsMaven:接口项目编程
【发布时间】:2012-05-27 10:03:18
【问题描述】:

我想知道是否可以在maven中实现如下接口项目。

Project-A 和 Project-B 具有相同的类,在 Project-C 中实现接口。 Project-Z 仅使用 Project-I(POM),其中包含 Project A、B、C 作为模块。

我想使用配置文件机制,以便 Project-Z 使用 Project-A 或 Project-B 的实现。

如果你认为可行,请给我一个简单的例子。

谢谢。

【问题讨论】:

    标签: java maven projects-and-solutions


    【解决方案1】:

    您可以使用 java SPI(服务提供者接口),两个实现的 jar 通过它在清单中声明相同的服务。使用应用程序可以进行查找、迭代并选择一个。 (我现场没有找到简单的例子。)

    【讨论】:

    • 是的,但我希望 Project-I(POM) 选择模块而不是其他应用程序。
    • 然后使用 delegate/factory 模式,在委托给两个直接实现之一的第三个类中实现接口。并且只提供那个委托类。
    • 我认为我不能为每个项目应用委托模式。应通过配置文件在项目级别提供解决方案。谢谢。
    【解决方案2】:

    如果你真的想用 maven 配置文件来做这件事,我想到的最简单的方法是,你可以在配置文件中设置一个带有类名的属性。然后在运行时实例化这个属性中的类。

    <profile>
        <id>a</id> 
        <properties> 
             <myproject.componentX.implementation.class>com.foo.bar.BazA</myproject.componentX.implementation.class>
    

    似乎很奇怪,为什么您要在构建时在根 pom 中执行此操作....也许您打算不经常更改它。有更好的方法,这取决于你打算做什么。

    您能否解释一下在什么情况下您想要更改它以及为什么以及多久更改一次?

    【讨论】:

      猜你喜欢
      • 2021-06-25
      • 2016-10-27
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 2013-11-29
      • 2012-07-05
      • 2011-07-02
      • 2015-10-21
      相关资源
      最近更新 更多