2009-12-18 65 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