2009-12-18 27 views
3

忍受我,我从Ant迁移到Maven2:我想我已经击中了Ant中很容易实现的一些小东西,但在Maven中并非如此...Maven:本地开发部署vs捆绑分发

如何处理本地部署与创建用于分配的存档/束到另一台机器之间的区别?

我们假设我的项目输出是一个EAR加上一些额外的配置文件。一个开发商当前正在从事的项目将需要部署和频繁地重新部署到自己的本地应用程序服务器(比如JBoss的),而一个集成工程师正在建设QA /生产将只需要创建最终档案汇编(tar/gz)。

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

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

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

最后,由于装配的类型可能取决于谁调用它不同,它似乎并不明智绑定组件,以构建周期,不是这样呢?但是这意味着开发者总是需要调用'mvn包',然后'mvn程序集:目录'来重建和测试更改。相反,集成工程师将始终需要运行'mvn程序包',然后执行'mvn程序集:程序集'以创建可分发的归档。我希望为每个解决方案提供单一命令解决方案,还是应该编写脚本?

回答

4

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

不知道你的相应的本地文件夹关于“开发部署的”的意思,但这个听起来像mvn pacakge在做什么,“捆绑”确实听起来像一个行家assembly

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

我想我们正在谈论整合工程师的任务。由于您没有解释“bundle”包含的是什么,所以目标应用程序服务器是什么(我的理解是您也在使用JBoss进行QA/production,但同样这是一个猜测),如果此bundle必须是自动部署,很难想象所有解决方案和/或替代方案。但的确,要复制/移动/解压缩/无论什么程序集,Maven antrun插件都是候选人。

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

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

+0

Thanks @Pascal。是的,我对任何事情都不太清楚:基本上,对于*开发人员*场景,我只是简单地将工件复制到同一台计算机上的某些文件夹(开发人员的PC),而对于集成工程师,我想生成一个程序集(tar.gz)他可以运送到另一台机器。你说得对,我忘了我可以将不同的装配配置绑定到我的配置文件。这似乎是最好的解决方案。 – 2009-12-21 10:34:31

+0

+1 - 绝对使用具有独立程序集的配置文件来生成特定的构建工件,就像您所描述的那样。这是做到这一点的最佳途径。 – whaley 2009-12-22 03:38:58