Java 使用大量工件组织Maven项目的方法

Java 使用大量工件组织Maven项目的方法,java,maven,Java,Maven,我正试图组织我的maven项目 比如说我的项目叫“真棒”。“awesome”有几个工件,每个工件的构建方式都不同(例如,其中一些可能是使用某些插件构建的,另一些是使用一些其他插件构建的):一般来说,这些构建配置是有限的(假设构建工件的方式最多有3种),但是,每个工件只能使用一个构建来构建(例如,实用工具工件是使用以特定方式配置的maven jar插件构建的,而工件客户端ui是使用以特定方式配置的maven war插件构建的) 现在,我知道我可以按如下方式组织maven项目: awesome-ro

我正试图组织我的maven项目

比如说我的项目叫“真棒”。“awesome”有几个工件,每个工件的构建方式都不同(例如,其中一些可能是使用某些插件构建的,另一些是使用一些其他插件构建的):一般来说,这些构建配置是有限的(假设构建工件的方式最多有3种),但是,每个工件只能使用一个构建来构建(例如,
实用工具
工件是使用以特定方式配置的
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
    具有相同的构建配置):如果需要更改生成配置,则需要更改所有其他副本

  • 另一个解决方案可能是在
    awesome root
    中声明插件管理,并在每个artifactId中编写插件定义:虽然这似乎更好,但它仍然存在与选项1相同的复制问题

  • 使用原型生成具有正确构建配置的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版本吗?问题更新了一些系统信息另一个选项我不知道