2016-05-13 103 views
1

我在一個使用maven和gradle的團隊中,我有一個希望生成一個運行pom文件的gradle項目,以便我們的maven用戶可以繼續使用maven。Gradle使用maven插件管理生成的POM上的插件

到目前爲止我解決了這個問題,如下產生適當的依賴關係的POM:

的build.gradle摘錄:

task createpom(dependsOn: 'build') << { 
    pom { 
     project { 
      groupId project.group 
      artifactId project.name 
      version project.version 
     } 
    }.writeTo("pom.xml") 
} 

build.finalizedBy(createpom) 

這非常適用於創建只是一個POM的依賴關係,但gradle的maven插件API似乎不支持定義<build>標記的內容,我需要爲某個成功的Maven構建導入某些插件。

總之,我需要執行下列操作之一:

  • 後處理生成標籤到生成的POM。我可以通過直接操作文件來實現,但不願意。
  • 將POM分爲兩部分,一部分只有gradle管理的依賴關係,另一部分只包含人工管理的東西。不幸的是,我沒有看到任何通過文件名任意命名pom依賴的手段;只有增加一個pom項目或使用多模塊構建的解決方案,這兩者我都不認爲我不需要可共享的父項目或多項目模塊項目。我更喜歡類似於<import>my/arbitrary/path/buildstuff.xml</import>的東西,因爲所有真正需要做的事情是將同一項目/生命週期的兩個POM粘合在一起。

除了目前爲止發現的情況,還有更好的方法來完成嗎?

回答

0

我使用了XML調整解決方案,該解決方案證明比我預期的更加優雅。實施包括增加非託管POM到我的項目目錄來保存生成的人管理的部分,修改我createpom任務,例如:

task createpom(dependsOn: 'build') << { 
    pom { 
     project { 
      groupId project.group 
      artifactId project.name 
      version project.version 
     } 
    }.withXml { 
     def templateXml = (new XmlParser()).parse('pom-unmanaged.xml') 
     asNode().append(templateXml.build) 
    }.writeTo("pom.xml") 
} 

pom-unmanaged.xml採用典型的聚甲醛的形式,減去位是我的gradle構建腳本生成。