Maven模块来扩展现有模块的功能



我目前有以下项目结构:

parentModule
├── moduleA
│   └── pom.xml        <--- moduleA POM
└── pom.xml            <--- parentModule POM

我想要达到的目标:

最终的结果是我想要有两个不同的jar文件,它们都是moduleA的版本,但它们之间有细微的差异。例如,一个版本的moduleA应该禁用它的一个特性,同时有效地覆盖另一个特性。

我不希望用户必须处理配置文件或设置,只希望能够为每个变体下载预构建的jar文件。

一个具体的例子是,我想要一个版本的moduleA来解析洋葱地址到一个连接对象,但我想要一个不同版本的moduleA来解析正常的IP地址到一个连接对象。对于这个特定的问题,我设想创建一个依赖于moduleA专门用于使用的模块-通过添加tor库作为依赖项,并以某种方式覆盖moduleA中当前的地址解析方法,使其仅适用于tor洋葱地址。

我当前的方法:

我一直在想,在这种情况下,反射可能是有用的,并设想了以下项目结构:

parentModule
├── moduleA
│   ├── src/package/Resolver.java            <--- Resolver interface
│   ├── moduleA-normal
│   │   └── src/package/ResolverImpl.java    <--- ResolverImpl implementing Resolver
│   │   └── pom.xml    <--- moduleA-normal POM
│   ├── moduleA-tor
│   │   └── src/package/ResolverImpl.java    <--- ResolverImpl implementing Resolver
│   │   └── pom.xml    <--- moduleA-tor POM
│   └── pom.xml        <--- moduleA POM
└── pom.xml            <--- parentModule POM

使用这种方法,我怀疑我可以使用反射来访问编译到最终jar中的ResolverImpl。虽然,我仍然没有看到一个简单的方法来禁用moduleA的核心组件,如流视频的能力。也许这个组件应该不再像我所创造的那样是一个"核心组件",因为目前我只是假设它会在那里。我是否应该做类似于上面建议的地址解析解决方案(使用接口和反射)?

是否有更好的方法来做我想要达到的目标,我如何才能正确地实现这一点?

如果你不想要一个外部对于jar文件,编写一次代码(在common模块中),然后创建单独的模块(仅在资源中的配置文件中有所不同)可能是值得的。

相关内容

  • 没有找到相关文章

最新更新