繁体   English   中英

我应该如何构建一组模块集合的 maven 项目?

[英]How should I structure my maven projects of a grouped collection of modules?

通用架构

我们有一个内部 java 应用程序(我们称之为com.example.framework )作为一种框架,可以通过插件进行扩展。 这些插件可以用于各种目的。 例如,将有一个插件用于支持不同的数据库提供程序,例如 MysqlPlugin、OraclePlugin 和 MssqlPlugin。 另一方面,它们可能支持交换格式,例如 JSON 或 XML 等。

代码拆分

框架应用程序是作为一个单独的多模块 java 项目开发的,其父组 ID com.example.framework ,将 API/SPI 作为一个独特的子模块。 因此,插件将此 api 模块作为依赖项称为com.example.framework.api ,它工作得很好。 理想情况下,每个插件在名为com.example.framework.plugins的组下都有自己的工件,这样我就只会安装那些真正需要的插件。

要解决的问题

为了简化开发人员的体验,我想将具有相似功能的插件分组,这些插件甚至可能希望将一些代码共享到一个 git 项目中,同时单独保留一些特殊的代码。 现在我想知道在 maven 系统中构建它的最佳方式是什么。

目前的想法

我能找到的最佳解决方案是对分组插件项目也使用多模块方法来实现拆分工件,同时能够在两个插件之间共享代码。 但是,我仍然对父级的 groupId 和版本感到困惑:

maven 的命名约定建议为每个项目使用唯一的 groupId。 这将意味着引入另一种命名深度,例如com.example.framework.plugins.sql.mysql ,这会很不方便,因为插件的名称不再足以导出完整的模块名称(先验知识常见的 package 名称com.example.framework.plugins )。 所以我想知道,公约的目的是否仅仅是为了避免可能的设计重复? 因为我控制命名空间和所有插件,所以我会确保没有冲突。

实际问题

如果我要删除中间名称层并因此有多个具有相同 groupId 的父 poms,会出现什么问题? 由于插件甚至不会共享版本,因此父级没有真正的目的,也没有可能发生冲突的工件,或者我错过了什么? 还是我的整个结构不理想,应该采用其他形式? 在我的研究过程中,我找不到任何类似的用例。

通常,不同的相关项目共享相同的 groupId。 这没有问题。 链接的 Maven 页面具有误导性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM