java - 使用大量工件组织 Maven 项目的方法
问题描述
我正在尝试组织我的 Maven 项目。
假设我的项目被称为“真棒”。“真棒”有几个工件,每个工件都以不同的方式构建(例如,其中一些可能是用一些插件构建的,另一些是用一些其他插件构建的):通常这些构建配置是有限且有限的(假设有大多数构建工件的 3 种不同方式),但是,每个工件只能使用一个构建构建(例如,utility
工件是以maven-jar-plugin
特定方式配置构建的,而工件client-ui
是maven-war-plugin
通过特定方式配置构建的)。
现在,我知道我可以按如下方式组织 Maven 项目:
awesome-root
|---jars
| |--- utility
| |--- client-model
| |--- task-model
| |--- supplier-model
| |--- client-logic
| |--- task-logic
| ---- supplier-logic
|---wars
|--- client-ui
|--- task-ui
---- supplier-ui
这样,每个特定的配置构建都可以放在build --> plugins
项目的部分中jars
,wars
而通用属性/依赖管理/插件管理可以放在awesome-root
.
问题: 我很快意识到开发人员生成的工件彼此密切相关,但构建不同。在前面的示例中,我们可以注意到可以以其他方式对工件进行分组:
awesome-root
|--- tasks
| |--- task-model
| |--- task-logic
| ---- task-ui
|--- clients
| |--- client-model
| |--- client-logic
| ---- client-ui
|--- supplier
| |--- supplier-model
| |--- supplier-logic
| ---- supplier-ui
|--- others
|--- utility
这种分组的主要优点是tasks
和clients
是suppliers
3 个不同的独立软件部门。当开发人员需要对client
扇区进行更改时,她在文件系统的一小部分(或 IDE 中的项目资源管理器选项卡中,如 Eclipse)中拥有所需的一切。反之亦然,在第一个映射中,clients
软件部门在项目存储库中被打乱了。
虽然这可能没什么大不了的,但如果“真棒”项目开始变得非常大,有很多工件等等,查找clients
扇区的所有相关部分开始很烦人(并非不可能,IDE 提供了用于此目的的搜索)。我会说第二种结构要好得多,开发人员明智。
然而,在 maven 中实现这个策略似乎很困难:主要困难是为每个工件放置不同的构建配置(例如,*-ui
需要以不同的方式构建*-model
)。
人们可能很想将这样的配置放在
client-ui
,client-logic
,中client-model
,但这意味着在任何地方都有重复的配置构建(例如,client-ui
,supplier-ui
,task-ui
具有相同的构建配置):如果需要更改构建配置,则需要更改所有其他副本;另一种解决方案可能是在其中声明插件管理,
awesome-root
并在每个 artifactId 中编写插件定义:虽然这看起来更好,但它仍然遭受与选项 1 相同的重复问题;使用原型生成具有正确构建配置的 pom:同上;
配置文件:配置文件不是继承的,它们只依赖于系统属性,而不是 maven 的;
我的问题是:
第二个结构在 Maven 中是不可能实现的吗?有办法吗?
如果没有,我是否需要硬着头皮设置第一个结构?
有其他选择吗?(我试图不提出 XY 问题,任何替代方案都值得赞赏);
附加信息:
- 操作系统:Ubuntu 18.04.3(仿生),64 位
- java版本:openjdk 11.0.4 2019-07-16
- IDE:Eclipse 4.10.0
- m2e 插件:1.10.0.20181127-2120
感谢您的回复
解决方案
推荐阅读
- spring - 为什么我应该在抽象类的 @Autowired 方法上使用 final 关键字?
- python - 当 conetxt 包含路径时,Django 无法在模板中显示上下文
- laravel - Laravel:如何在监听器中测试 cookie?
- python - tqdm 迭代超出可迭代范围
- symfony - Symfony @Assert\Type("string") 验证通过整数值
- junit - 已检查的异常对此方法无效!Junit5 JMSException 测试失败
- css - 有没有更好的方法将此背景图像与其上方的文本对齐?
- python - 将json文件转换为toml文件
- python - 在重定向烧瓶中传递数组/列表作为参数
- ios - 将用户输入的信息传递给 View 并用它创建一个新的类似小部件的卡片