Dynamic Gradle with maven publish:如何自动版本并将目录中的非Gradle JAR发布到Artifactory

Dynamic Gradle with maven publish:如何自动版本并将目录中的非Gradle JAR发布到Artifactory,dynamic,gradle,publish,artifactory,Dynamic,Gradle,Publish,Artifactory,作为从ant迁移到gradle的短期选择,我们只希望在ant构建的开始和结束时使用gradle,而不是从gradle内部运行ant 基本上,我们希望使用gradle将依赖项提取到一个目录,然后运行ant构建,将所有指定的JAR放在一个目录中,然后使用gradle将工件从该目录发布到Artifactory 这意味着gradle将不会实际构建工件——而是在目录中找到它们,但我们仍然希望对它们进行版本控制(因为它们将转到artifactory) 因此,我们希望使用Gradle动态地更新和发布目录中的所

作为从ant迁移到gradle的短期选择,我们只希望在ant构建的开始和结束时使用gradle,而不是从gradle内部运行ant

基本上,我们希望使用gradle将依赖项提取到一个目录,然后运行ant构建,将所有指定的JAR放在一个目录中,然后使用gradle将工件从该目录发布到Artifactory

这意味着gradle将不会实际构建工件——而是在目录中找到它们,但我们仍然希望对它们进行版本控制(因为它们将转到artifactory)

因此,我们希望使用Gradle动态地更新和发布目录中的所有文件

回顾gradle文档,gradle和artifactory发布插件似乎更关注“发布哪些模块”的静态定义。我很难让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对象,但无法实现。这是更好的方法吗


谢谢

EDIT:通过进一步的研究和对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='...'
      }
   }
}
apply插件:“java”
应用插件:“maven发布”
应用插件:“artifactorypublish”
版本=新版本(1,0,System.env.BUILD\u编号)//由Jenkins设置
ext.filesToPublish=[]
ext.dir=新文件(“发布”)
ext.dir.eachFile(groovy.io.FileType.FILES){file->

ext.filesToPublish您可能只想看看以太任务,以解决从构建到repo的依赖关系和部署工件。这将使事情变得更简单。谢谢您,Manfred。我会看一看。最后!我希望gradle文档有一个示例,展示如何像此示例那样动态创建发布名称。Gr吃活儿!