使用 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-b
或 core + 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 并不是一件容易的事,但在学习了这些概念之后,我不会回头看!
我正在寻找有关如何构建由多个模块组合组成的工件的建议,而无需针对所有可能性重复大量样板文件:
我们有一个 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-b
或 core + 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 并不是一件容易的事,但在学习了这些概念之后,我不会回头看!