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