作为从ant迁移到gradle的短期选项,我们只想在我们的ant构建的开始和结束时使用gradle,而不是从gradle中运行ant。
基本上我们想使用gradle来获取目录的依赖关系,然后运行ant build,将所有指定的jar放在一个目录中,然后使用gradle将该目录中的工件发布到Artifactory。
这意味着gradle实际上不会构建工件 - 它会在目录中找到它们,但是我们仍然会喜欢它们的版本化(因为它们会变成神器)
因此,我们希望使用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 :(得分:4)
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='...'
}
}
}