簡體   English   中英

與Maven發布一起搖籃:如何自動版本化和將目錄中的非漸變罐子發布到Artifactory

[英]Gradle with maven-publish: how to autoversion and publish non-gradle jars in a directory to Artifactory

作為從ant遷移到gradle的短期選擇,我們希望僅在我們的ant構建的開始和結束時使用gradle,而不是從gradle內部運行ant。

基本上,我們希望使用gradle將依賴項提取到目錄,然后運行ant build將所有指定的jar放置在目錄中,然后使用gradle將工件從該目錄發布到Artifactory。

這意味着gradle並不會實際構建工件,而是會在目錄中找到它們,但是我們仍然希望對它們進行版本控制(因為它們將進入工件)

因此,我們希望使用Gradle動態地版本化和發布目錄中的所有文件。

查看gradle文檔,似乎Gradle和artifactory-publish插件專注於“要發布的模塊”的更靜態定義。 我很難讓Gradle正確發布目錄中文件的動態計數。

我已經嘗試了以下內容(壓縮),但到目前為止在我的測試中還行不通(因為MavenPublication名稱似乎需要靜態文本)-人工發布位當前未遍歷正確的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對象,但是無法正常工作。 那會是更好的方法嗎?

謝謝!

編輯:通過額外的研究和對Groovy的更好理解,我能夠做到以下幾點-請注意,與以前相比,在變量擴展周圍使用了雙引號-“ $ fbase”:

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='...'
      }
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM