2011-04-14 53 views
4

據我所知,這是違反maven最佳做法,但也許我的情況是規則中少數例外之一 - 至少我堅持考慮替代方案:(如何從一個來源生成多個Maven構件

環境是這樣的:

  • 我們的專有技術爲基礎的界面的遺留應用程序向外界
  • 我們要立足於原有的接口,我們生成Flash上​​使用閃存作爲新的前端
  • CL評估並將它們打包在一個flash swc中供前端開發人員使用
  • 基於傳統接口,我們生成了將Flash服務請求(經由blazeds)連接到我們的傳統接口
  • 以使其更加困難,我們不希望/不能在每個接口上使用它自己的pom,因爲我們有幾十個(接口),它們只會在它們的artifactId上有所不同。相反,我使用了一個「通用」項目結構,它將爲每個構建(通過jenkins)進行參數化。該項目將只有被用於一個完全自動化的環境。

首先,我試圖把所有這些放在一個「簡單」的項目中,這個項目一直工作到工件應該安裝的地步。

我目前的做法是行家參考第13章,其中有它自己的一些缺點,激發一個多模塊項目結構:

GenericProject 
| 
+-- GenerateSources from legacy interface 
| +-- pom.xml 
| 
+-- Java 
| +-- pom.xml 
| 
+-- SWC 
| +-- pom.xml 
| 
+-- pom.xml 

這種方法有一個缺點,那我有「的Java」 &「引用SWC「改爲」GenerateSource「的內部結構,這是醜陋但可以容忍的。
我的方式真正得到的是,我必須嚴格調整安裝&部署插件,以獲得觸發整個過程的名稱&版本的傳統界面的工件。 我現在運行了,但看起來非常脆弱。

我認爲拆分/兩個簡單的項目複製項目:

  • GenerateSources &的Java
  • GenerateSources & SWC

但是這隻能解決交叉引用的小麻煩。

正如亞倫在他的評論中指出的,我不清楚這個問題。 一些實驗在這之後得到了很多更清晰的對我說: 基本上我有兩個問題要解決

  1. 安裝/部署兩個文物一起
  2. 名比project.artifactId

不同的工件

任何建議,使整個過程更像maven樣?

在此先感謝。

+0

我認爲你應該把問題分解爲更簡單更具體的問題。現在,我不確定你的問題是什麼。你知道關於允許在構建過程中創建更多構件的JAR插件嗎?您是否知道指定最終工件名稱的選項? 「內部結構的參考」究竟是什麼意思? – 2011-04-14 09:17:43

+0

Hi Aaron,在我的單項目方法中,我已經將project.build.finalName設置爲「$ {Interface-Name} - $ {Interface-Verion}」和 – Thomas 2011-04-14 10:07:22

+0

[soory,wong key]。 。 。它得到了JAR插件的支持,所以我得到了一個「Interface-Name-Interface-Version.jar」。但是,安裝和部署插件堅持使用project.artifactId來實現其目的。另外,快照和發佈版本之間的區別也基於project.version而不是$ {Interface-Version},因爲我需要它。 – Thomas 2011-04-14 10:17:17

回答

3

一些彎路跟我來到了以下務實的解決方案的多模塊方法後:

  1. 使用build-helper-plugin附加輔助神器來安裝/全自動部署
  2. 兩階段構建:

    2.1通過sed生成pom.xml,其中包含解析project.artifactId & project.version

    2.2運行Maven構建

雖然理論上可以使用表達式作爲project.artifactId & project.version,行家爲您提供了這樣的警告。 。 。有一個很好的理由: 當您嘗試引用生成的工件時,nexus會爲您提供「無法讀取工件描述符...」錯誤。 我懷疑這是因爲在存儲庫中存儲的pom中,表達式是無法解析的!

2

您應該編寫一個附加到generate-sources階段的小型Maven插件。一個例子見maven-annotation-pluginmain class)。

這將在GenerateSource的輸出中包含生成的源,並且只需在其他POM中包含依賴關係即可使用這些類。請注意,您應該在target/下創建這些文件,而不是在src/

至於安裝/部署:這些插件從創建工件的插件獲取它們的名稱。所以你如何設置屬性肯定有問題。在你的情況下,這是JAR plugin。該文檔有一個示例如何set the name of the default artifact

相關問題