【问题标题】:Maven: local development deploy vs bundling for distributionMaven:本地开发部署与捆绑分发
【发布时间】:2010-12-28 02:28:43
【问题描述】:

请耐心等待,我正在从 Ant 迁移到 Maven2:我认为我已经遇到了在 Ant 中很容易但在 Maven 中并非如此的小事情之一......

我如何处理本地部署与创建存档/捆绑以分发到另一台机器之间的区别?

假设我的项目的输出是一个 EAR 加上一些额外的配置文件。一个积极参与项目的开发人员需要经常部署和重新部署到他的本地应用服务器(比如 JBoss),而一个正在构建的集成工程师对于 QA/生产,只需要创建最终的存档程序集 (tar/gz)。

在 Ant 中,我们为此设置了两个目标:“dev-deploy”和“bundle”。两者都进行了完整的构建,但在最后一步有所不同:“dev-deploy”将 EAR 和配置文件复制到各自的本地文件夹,而“bundle”只是将 EAR 和配置文件放在 tar.gz 程序集中。

你如何在 Maven 中做到这一点?

我已经看到程序集插件可以创建档案(tar、gz 等)或展开目录(来自相同的程序集描述符)。我可以调用 assembly:assemblyassembly:directory,但对于后者,如何将最终输出复制到本地 JBoss 部署文件夹?从related post 看来,临时复制文件并不是 Maven 的真正意义所在,因此 antrun 副本可能是最合适的?

最后,由于程序集的类型可能因调用它的人而异,将程序集绑定到构建生命周期似乎并不明智,不是吗?但这意味着开发人员总是需要调用 'mvn package' 后跟 'mvn assembly:directory' 来重建和测试更改。相反,集成工程师将始终需要运行 'mvn package',然后运行 ​​'mvn assembly:assembly' 来创建可分发的存档。我希望为每一个都提供一个命令解决方案,还是应该只编写脚本?

【问题讨论】:

    标签: maven-2


    【解决方案1】:

    在 Ant 中,我们为此设置了两个目标:“dev-deploy”和“bundle”。两者都进行了完整的构建,但在最后一步有所不同:“dev-deploy”将 EAR 和配置文件复制到各自的本地文件夹,而“bundle”只是将 EAR 和配置文件放在 tar.gz 程序集中。

    不确定您对“dev-deploy”的各个本地文件夹是什么意思,但这听起来像 mvn pacakge 正在做的事情,而“bundle”确实听起来像 maven assembly。 p>

    我已经看到程序集插件可以创建档案(tar、gz 等)或分解目录(来自相同的程序集描述符)。我可以调用程序集:程序集或程序集:目录,但对于后者,如何将最终输出复制到本地 JBoss 部署文件夹?从相关帖子看来,临时复制文件并不是 Maven 的真正意义所在,因此 antrun 副本可能是最合适的?

    我想我们在这里讨论的是集成工程师的任务。由于您没有解释“捆绑包”确切包含什么,目标应用程序服务器是什么(我的理解是您也在使用 JBoss 进行 QA/生产,但同样,这是一个猜测),如果这个捆绑包必须是自动部署,很难想象所有解决方案和/或 antrun 的替代方案。但实际上,要复制/移动/解压缩/任何程序集,maven antrun 插件是一个候选者。

    最后,由于程序集的类型可能因调用它的人而异,将程序集绑定到构建生命周期似乎并不明智,不是吗?但这意味着开发人员将始终需要调用“mvn package”,然后调用“mvn assembly:directory”来重建和测试更改。相反,集成工程师将始终需要运行“mvn package”,然后运行“mvn assembly:assembly”来创建可分发的存档。我希望每个都有一个命令解决方案,还是应该只编写脚本?

    我的理解是集成工程师正在构建捆绑包。为什么开发人员需要捆绑包?这令人困惑......无论如何,我真的不需要细节来思考答案。您实际上可以将 maven 程序集插件声明为特定的build profiles,一个用于开发,一个用于集成,并将singledirectory-single mojos 绑定到每个配置文件中的项目构建生命周期。这将允许只使用一个命令并避免任何脚本(真的,不要这样)。

    【讨论】:

    • 谢谢@Pascal。是的,我对所有事情都不太清楚:基本上,对于 developer 场景,我想简单地将工件复制到同一台机器(开发人员的 PC)上的一些文件夹中,而对于集成工程师,我想要生产一个可以运送到另一台机器的程序集(tar.gz)。你说得对,我忘了我可以将不同的程序集配置绑定到我的配置文件。这似乎是最好的解决方案。
    • +1 - 绝对使用带有单独程序集的配置文件来生成您所描述的特定构建工件。这是执行此操作的 Maven 方式。
    猜你喜欢
    • 2016-05-02
    • 2014-09-01
    • 2010-11-27
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多