Dynamic Gradle with maven publish:如何自动版本并将目录中的非Gradle JAR发布到Artifactory
作为从ant迁移到gradle的短期选择,我们只希望在ant构建的开始和结束时使用gradle,而不是从gradle内部运行ant 基本上,我们希望使用gradle将依赖项提取到一个目录,然后运行ant构建,将所有指定的JAR放在一个目录中,然后使用gradle将工件从该目录发布到Artifactory 这意味着gradle将不会实际构建工件——而是在目录中找到它们,但我们仍然希望对它们进行版本控制(因为它们将转到artifactory) 因此,我们希望使用Gradle动态地更新和发布目录中的所有文件 回顾gradle文档,gradle和artifactory发布插件似乎更关注“发布哪些模块”的静态定义。我很难让Gradle正确地发布目录中文件的动态计数 我尝试了以下方法(压缩),但到目前为止,它在我的测试中不起作用(因为MavenPublication名称似乎需要静态文本)——并且artifactory publish位当前没有在适当的MavenPublications集合上循环: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动态地更新和发布目录中的所
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吃活儿!