2016-05-09 81 views
2

我想用兩個不同的分類器部署兩個罐子工件,但由於兩者都提供了它們自己的版本pom.xml,所以目前失敗。我該如何解決這個問題,以便兩個pom.xml可以與他們的工件一起上傳?Maven從兩個單獨的pom.xml部署兩個不同分類器的罐子

示例 - 我有com.test.company.somelib-1.0.0-cmp1.jarcom.test.company.somelib-1.0.0-cmp2.jar,其中cmpX是一個分類器。這兩個軟件包都包含(邏輯上)相同的代碼和類(具有相同的版本),但它們在預處理方式上略有不同。分類器註釋是由於我們需要維護的向後兼容性。

長話短說,第一件神器上傳正常,第二件失敗,Forbidden,因爲我們的存儲庫不允許覆蓋工件(我想保留它)。

有一個稍微不同的管道可以創建兩個包,所以它們的構建很容易分開。我只想將它們部署爲兩個具有相同名稱和不同分類器的軟件包。

感謝您的幫助


編輯:有人建議使用Maven的配置文件。我可以看到他們會工作,但他們不會很理想。

考慮下圖中描述的設置 - 有一個CI服務器(TeamCity)。

  • 有一個「啓動器」構建(來源)。這個版本檢出所有必需的源文件。
  • 從這個初學者構建幾個其他版本被觸發(處理使用x.x.x/編譯)。其中的每一個構建都會調整一個template-pom.xml(填充特定的classifier和其他信息),然後構建它的工件並將其部署到我們的Artifactory。

enter image description here

隨着我要實現的,如果我決定要添加其他處理,建立的設置,所有我需要做的就是添加一個「分支」。如果我使用配置文件,我還需要將一個新配置文件添加到pom.xml文件中。

請糾正我,如果我錯了。配置文件似乎能夠實現目標,但不是理想的,至少在我的情況下。

+0

難道我理解你的權利 - 你有兩個不同的POM文件,但它們具有相同的GroupId的artifactId版本和因此在部署第二個時會被禁止? – mediahype

+0

是的,這是正確的。文件的名稱是不同的(分類器),但它們的pom.xml名稱是相同的 - 當pom.xml被上傳時,我得到了禁止。 –

+0

歸結爲以下問題:編譯時需要* runtime * .jar文件嗎?因爲從名稱看,它看起來不像 – mediahype

回答

1

我強烈建議擁有2個(或更多)具有相同GAV的不同pom文件。

但我知道您的需求是由傳統原因引發的。 我還沒有嘗試過這個,但它可以工作: 讓你現在擁有一個build(= maven項目)。在其他構建跳過正常的部署和手動調用部署插件,像這樣的部署文件的目標:

<build> 
    <plugins> 
    <!-- skip normal execution of deploy plugin --> 
    <plugin> 
     <artifactId>maven-deploy-plugin</artifactId> 
     <executions> 
      <execution> 
       <id>default-deploy</id> 
       <configuration> 
        <skip>true</skip> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 

    <!-- invoke with goal: deploy-file --> 
    <plugin> 
     <artifactId>maven-deploy-plugin</artifactId> 
     <executions> 
      <execution> 
       <id>someId</id> 
       <phase>deploy</phase> 
       <goals> 
       <goal>deploy-file</goal> 
       </goals> 
       <inherited>false</inherited> 
       <configuration> 
       <file>path-to-your-artifact-jar</file> 
       <generatePom>false</generatePom> 
       <artifactId>xxx</artifactId> 
       <groupId>xxx</groupId> 
       <version>xxx</version> 
       <classifier>xxx</classifier> 
       <packaging>xxx</packaging> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 
    </plugins> 
</build> 
+0

我與我重構此產品的經理進行了交談,並且我們同意爲每個運行時版本使用單獨的組/工件。這樣我們就可以擺脫分類器,並且對Maven的攻擊變得更少了。他們將不得不改變一些東西,但似乎是值得的。儘管謝謝你的回答 –

相關問題