使用 Plugins/Extensions 定制构建的 Maven 最佳实践?

Maven Best-Practices for Customized Builds with Plugins/Extensions?

我正在寻找有关如何构建由多个模块组合组成的工件的建议,而无需针对所有可能性重复大量样板文件:

我们有一个 software,它作为 .war 部署到 Tomcat 中,作为 .amp 部署到 Alfresco 运行 中 运行 =73=]实例。

与 Alfresco 相关的所有内容/.amp与问题的范围无关。为简单起见,假设有一个关于 Maven 的 .war 工件。

我们使用开放核心模型并有一个免费版本,其中包含一些代码,这些代码最终出现在 .amp 和一个包含 Angular-Frontend 的 .war 文件中和几个后端库。

目前我们的软件中有两个插件ware - 每个插件提供一个额外的 .amp 文件 添加一个 .jar / 配置文件到 .war 并且我们有很多扩展 - 每个扩展 overwrites/extends 一些 Angular- 前端文件并且还添加 XML- 配置到 .war and/or .amp

现在我正在尝试从一个古老的基于 ant 的构建设置迁移到 Maven,该设置基本上只是在基础安装上复制 plugins/extensions 部署时间。

我需要能够创建如下配置:core + plugin-a + extension-bcore + plugin-a + plugin-b + extension-c - 这样我就有多个 .amp 工件和每个配置的单个 .war 工件.

如果也可以像core + plugin-a + plugin-b + extension-c + extension-d

这样聚合扩展就好了

目前我正在为 .war 使用 maven assembly 插件,为 angular 使用 maven-frontend-plugin 并且 assembly-plugin 只是将编译的工件复制到 war.

.war本身就是一个maven模块。

我可以继续这个策略并为每个扩展和每个插件创建模块,但是我需要一个模块用于 每个 扩展和插件的可能组合。

更糟糕的是,一些 extensions/plugins 是商业的并且存在于不同的存储库中 - 所以我不能将所有内容都添加到开放核心 POM。

我查看了配置文件,但我不确定这是否能解决我的问题 - 因为我需要像所有子模块的中央注册表之类的东西?

mvn clean package -Pextension-a,extension-b,plugin-a 这样创建工件的想法会很棒。

如何使用 Maven 解决这个问题?是否有具有这些要求的项目,我可以在那里查看它是如何解决的?

这个答案有点推测性,因为我对 Alfresco 一无所知。

您是否考虑过编写一个 Maven 插件来下载 extension/plugin(可能是来自您的存储库的 zip 文件?),将其解压缩并将其应用到您的项目中?

然后你可以用 extensions/plugins.

的不同列表调用 maven 插件

最后我找到了Bazel with jvm_rules_external

允许使用 git/maven/http/etc.pp 的依赖项的 WORKSPACE 文件的概念非常适合这个。 Beeing 还能够使用 Bazel 构建 Angular 前端并创建轻量级 Docker 图像以及缓存的增量构建使其非常适合。

然而,从 Maven 过渡到 Bazel 并不是一件容易的事,但在学习了这些概念之后,我不会回头看!