2014-07-08 49 views
2

作爲從螞蟻遷移到gradle的短期選項,我們希望僅在我們的ant的開始和結束處使用gradle建立而不是從Gradle內運行螞蟻。Gradle with maven-publish:如何自動轉換並將目錄中的非gradle jar發佈到Artifactory

基本上我們希望使用gradle來獲取目錄的依賴關係,然後運行ant build,將所有指定的jar放在一個目錄中,然後使用gradle將artifacts從該目錄發佈到Artifactory。

這意味着gradle這個實際上不會建立文物 - 這反而發現他們在一個目錄,但我們仍希望他們版本(因爲他們會去artifactory的)

所以我們正在尋找使用Gradle動態版本併發布目錄中的所有文件。

回顧gradle文檔,看起來Gradle和artifactory-publish插件專注於更多靜態定義'要發佈什麼模塊'。我很難讓Gradle正確地從一個目錄發佈一個動態的文件數。

我試過以下(濃縮版),但它在目前爲止在我的測試中不起作用(因爲MavenPublication名似乎需要靜態文本) - 而artifactory-publish位目前沒有循環播放適當的設置MavenPublications的:

apply plugin: 'java' 
apply plugin: 'maven-publish' 
apply plugin: 'artifactory-publish' 

version = new Version(1, 0, System.env.BUILD_NUMBER) // set by Jenkins 

ext.filesToPublish=['foo.jar', 'bar.ear'] 

publishing { 
    publications { 
     def i=0; 
     for (s in filesToPublish) { 
     ++i 
     def vname="artifact" + i; 
     $vname(MavenPublication) { 
      artifact s 
      artifactId vname 
     } 
     } 
    } 
} 

artifactory { 
    contextUrl = 'http://.../artifactory' 
    publish { 
     repository { 
     repoKey='...' 
     username='...' 
     password='...' 
     } 
     defaults { 
     publications('artifact0') 
     publications('artifact1') 
     publications('artifact2') 
     } 
    } 
    resolve { 
     repository { 
     repoKey='...' 
     } 
    } 
} 

我很感興趣,如果有人想出一個辦法來動態地發佈所有文件中找到的目錄artifactory的。

有沒有更好的方法,比如定義像Java插件這樣的組件的方法?

我也試着動態創建MavenPublication對象,但無法得到那個工作。這會是一個更好的方法嗎?

謝謝!

+0

您可能只想查看以太網ant任務來解決依賴關係,並將構建中的工件部署到回購站。這將使事情變得更簡單。 https://github.com/eclipse/aether-ant –

+0

謝謝你,Manfred。我會看看。 – user3817454

回答

3

編輯:隨着更多的研究和更好地瞭解了Groovy的,我能做到這一點如下 - 注意周圍的變量擴展使用雙引號的 - 「$ f基準」相比之前:

apply plugin: 'java' 
apply plugin: 'maven-publish' 
apply plugin: 'artifactory-publish' 

version = new Version(1, 0, System.env.BUILD_NUMBER) // set by Jenkins 

ext.filesToPublish = [] 
ext.dir= new File("pub") 
ext.dir.eachFile(groovy.io.FileType.FILES) { file -> 
    ext.filesToPublish << file 
} 

publishing { 
    publications { 
     for (f in filesToPublish) { 
     def fbase=f.getName().split("\\.")[0] 
     "$fbase"(MavenPublication) { 
      artifact f 
      artifactId fbase 
     } 
     } 
    } 
} 


artifactory { 
    contextUrl = 'http://.../artifactory' 
    publish { 
     repository { 
     repoKey='...' 
     username='...' 
     password='...' 
     } 
     defaults { 
     for (f in filesToPublish) { 
      def fbase=f.getName().split("\\.")[0] 
      publications(fbase) 
     } 
     } 
    } 
    resolve { 
     repository { 
     repoKey='...' 
     } 
    } 
} 
+0

終於!我希望gradle文檔有一個例子,展示如何像本例那樣動態創建發佈名稱。做得好! –

相關問題