我需要实现一个摇篮的任务,将上传多个现有的JAR文件的Maven仓库。
最棘手的部分是JAR文件的列表被事先并不知道。 我想它的工作方式是下载中心一定的“.tar.gz”文件中的第一,其解压缩,然后扫描JAR文件,并上传了某种命名约定(如使用JAR名作为的artifactId的和压缩.tar的版本。 GZ的版本)。
什么是这样做与摇篮的最简单的方法? 目前,它是搜索的JAR和运行Maven的部署一个简单的bash脚本:部署文件为他们每个人,但我需要把该功能的gradle中构建脚本。
理想情况下,我需要一个像“deployJars”,将上传的一切,取决于“downloadTarGz”任务的任务。
更新:
如何上传的POM,而不附带任何JAR? 我需要生成几个杂多酸,这将依赖于这些动态检测JAR和上传他们。 “神器”需要我指定的文件上传。
要上传的gradle通过一个罐子,你必须声明罐子作为发布神器并将其添加到使用文物关闭特定的配置:
apply plugin:'maven'
configurations{
allJars
}
artifacts{
allJars file("path/to/jarFile.jar")
}
现在你可以配置动态创建uploadAllJars任务:
uploadAllJars {
repositories {
mavenDeployer {
repository(url: 'http://localhost:8081/artifactory/acme') {
authentication(userName: 'admin', password: 'password');
}
}
}
问题是,你要上传多个工件。 为了实现这一目标,你需要一些更动态的生成脚本。 publishartifacts为所有发现罐子的动态创建可以被包裹在一个任务。 在我的例子discoverAllJars任务只是看起来在jar文件指定的文件夹。 在这里,你需要实现自己的逻辑来查找的罐子在您的TGZ存档。
group = "org.acme"
version = "1.0-SNAPSHOT"
task discoverAllJars{
ext.discoveredFiles = []
doLast{
file("jars").eachFile{file ->
if(file.name.endsWith("jar")){
println "found file ${file.name}"
discoveredFiles << file
artifacts{
allJars file
}
}
}
}
}
为了能够为您必须使用聚甲醛过滤uploadAllJars任务中上传多个工件。 有关POM筛选细节都看看gradle这个userguide在http://www.gradle.org/docs/current/userguide/maven_plugin.html#uploading_to_maven_repositories
因为我们移动文物公布的配置到gradle这个执行阶段,我们必须在执行阶段配置uploadAllJars了。 所以我想创建一个configureUploadAllJars任务。 注意我们是如何引用通过使用“discoverAllJars.discoveredFiles”发现的jar文件:
task configureUploadAllJars{
dependsOn discoverAllJars
doLast{
uploadAllJars {
repositories {
mavenDeployer {
repository(url: 'http://yourrepository/') {
authentication(userName: 'admin', password: 'password');
}
discoverAllJars.discoveredFiles.each{discoveredFile ->
def filterName = discoveredFile.name - ".jar"
addFilter(filterName) { artifact, file ->
file.name == discoveredFile.name
}
pom(filterName).artifactId = filterName
}
}
}
}
}
}
现在你只需要添加uploadAllJars和configureUploadAllJars之间的依赖关系:
uploadAllJars.dependsOn configureUploadAllJars
这个例子使用了所有已发现的jar文件以及JAR名称的artifactId同一组和版本。 你可以像使用POM过滤机制改变成你。
希望帮助,
欢呼声,刘若英