【发布时间】:2014-07-08 17:31:28
【问题描述】:
作为从 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 对象,但无法使其正常工作。那会是更好的方法吗?
谢谢!
【问题讨论】:
-
您可能只想查看以太蚂蚁任务来解决依赖关系并将工件从构建部署到存储库。这将使事情变得更简单恕我直言。 github.com/eclipse/aether-ant
-
谢谢你,曼弗雷德。我去看看。
标签: dynamic gradle publish artifactory