Java 使用大量工件组织Maven项目的方法
我正试图组织我的maven项目 比如说我的项目叫“真棒”。“awesome”有几个工件,每个工件的构建方式都不同(例如,其中一些可能是使用某些插件构建的,另一些是使用一些其他插件构建的):一般来说,这些构建配置是有限的(假设构建工件的方式最多有3种),但是,每个工件只能使用一个构建来构建(例如,Java 使用大量工件组织Maven项目的方法,java,maven,Java,Maven,我正试图组织我的maven项目 比如说我的项目叫“真棒”。“awesome”有几个工件,每个工件的构建方式都不同(例如,其中一些可能是使用某些插件构建的,另一些是使用一些其他插件构建的):一般来说,这些构建配置是有限的(假设构建工件的方式最多有3种),但是,每个工件只能使用一个构建来构建(例如,实用工具工件是使用以特定方式配置的maven jar插件构建的,而工件客户端ui是使用以特定方式配置的maven war插件构建的) 现在,我知道我可以按如下方式组织maven项目: awesome-ro
实用工具
工件是使用以特定方式配置的maven jar插件
构建的,而工件客户端ui
是使用以特定方式配置的maven war插件
构建的)
现在,我知道我可以按如下方式组织maven项目:
awesome-root
|---jars
| |--- utility
| |--- client-model
| |--- task-model
| |--- supplier-model
| |--- client-logic
| |--- task-logic
| ---- supplier-logic
|---wars
|--- client-ui
|--- task-ui
---- supplier-ui
这样,每个特定的配置构建都可以放在项目jars
和wars
的build-->plugins
部分中,而常规属性/依赖项管理/插件管理可以放在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
此分组的主要优点是任务
、客户
和供应商
是三个不同的独立软件部门。当开发人员需要在(比如说,客户机
扇区)中进行更改时,她在文件系统的一小部分中(或者在IDE的ProjectExplorer选项卡中,如Eclipse)拥有所需的一切。反之,在第一个映射中,客户机
软件部门在项目存储库中被搅乱
虽然这可能没什么大不了的,但如果“令人敬畏”的项目开始变得非常庞大,有大量的工件等等,那么查找客户机
扇区的所有相关部分开始让人恼火(并非不可能,IDE为此提供搜索)。
我认为第二种结构更好,从开发人员的角度来看
然而,在maven中实现这个策略似乎很困难:主要的困难是将每个工件的不同构建配置放在哪里(例如,*-ui
需要以不同的方式构建*-model
)
- 人们可能会尝试将此类配置放在
,客户端ui
,客户端逻辑
,但这意味着到处都有重复的配置构建(例如,客户端模型
,客户端ui
,供应商ui
具有相同的构建配置):如果需要更改生成配置,则需要更改所有其他副本任务ui
- 另一个解决方案可能是在
中声明插件管理,并在每个artifactId中编写插件定义:虽然这似乎更好,但它仍然存在与选项1相同的复制问题awesome root
- 使用原型生成具有正确构建配置的POM:同上
- 配置文件:配置文件不是继承的,它们只依赖于系统属性,而不是maven的属性
- 第二种结构在Maven中不可能实现吗?有办法吗
- 如果不是,我是否需要咬紧牙关,开始第一个结构
- 还有别的选择吗?(我尽量不提出XY问题,欢迎任何替代方案)
- 操作系统:Ubuntu 18.04.3(仿生),64位
- java版本:openjdk 11.0.4 2019-07-16
- IDE:Eclipse4.10.0
- m2e插件:1.10.0.20181127-2120
感谢您的回复。问题:为什么您需要不同的配置来构建war或jar?你能详细解释一下吗。。?(我在一个构建中组织了800多个模块的构建)……我认为一切都有可能……域显示了在哪里放置不同的事物树……层次结构只是一个例子:实际上,我想在脑海中使用OSGi,所以有些工件是捆绑包(因此需要使用
maven bnd plugin
进行处理。其他的是战争。其他的是WAB。其他的是普通捆绑包,但需要比第一个工件类别更少的依赖性。问题不是我有太多的模块。问题是模块具有不确定的构建/依赖性。我希望我表达了我的观点,或者我没有完全理解您的问题。:)你能告诉我你使用的是哪个Java版本吗?问题用一些系统信息更新了另一个选项我不知道你是否考虑过:定义不同的父级。虽然awesome root
是模块的聚合器,但它不必是父级-你可以创建ui父级
,逻辑父级
等等,把你可以在那里进行构建配置,并让模块根据需要使用这些父模块。可能对你有用,也可能对你无效…问题:为什么你需要不同的配置来构建war或jar?你能更详细地解释一下吗?(我在一个构建中组织了800多个模块的构建)…我认为一切都是可能的…域显示了在哪里放置不同的事物树…层次结构只是一个例子:实际上,我想在脑海中使用OSGi,所以有些工件是捆绑的(因此需要使用maven bnd plugin
进行处理。其他的是战争。其他的是WAB。其他的是普通捆绑包,但需要比第一个工件类别更少的依赖性。问题不是我有太多的模块。问题是模块具有不确定的构建/依赖性。我希望我表达了我的观点,或者我没有完全理解您的问题。:)您能告诉我您使用的是哪个Java版本吗?问题更新了一些系统信息另一个选项我不知道