如何取消引用Gradle出版物集?

如何取消引用Gradle出版物集?,gradle,groovy,artifactory,ivy,Gradle,Groovy,Artifactory,Ivy,已解决-请参阅本文末尾 单独发布常春藤出版物时,我如何在“子项目”部分引用该集合 我正在处理在嵌套迭代中构建RPM的任务-它们看起来有点像这样: def addWebServerTasks(aProject, hostId) { aProject.with { task "buildRpm_${hostId}"(type: Rpm, dependsOn: "templates_${hostId}") { ... } publ

已解决-请参阅本文末尾

单独发布常春藤出版物时,我如何在“子项目”部分引用该集合

我正在处理在嵌套迭代中构建RPM的任务-它们看起来有点像这样:

def addWebServerTasks(aProject, hostId) {
    aProject.with {
        task "buildRpm_${hostId}"(type: Rpm, dependsOn: "templates_${hostId}") {
        ...
        }
        publishing.publications.create("${project.name}-${hostId}", IvyPublication) {
            artifact tasks."buildRpm_${hostId}".outputs.getFiles().getSingleFile()
        }
    }
}
publishing {
    repositories {
        ivy {
            credentials {
                username "${citiEarUser}"
                password "${citiEarPassword}"
            }
            url "${yumRepo}"
            layout 'pattern', {
                artifact "[module]"
            }
        }
    }
}
这将创建8个rpm,文件名的格式为:subproject-env-region-hostname-version_branchname.rpm。以下是一个示例:

web-server-config-DEV-EMEA-dev.server.com-1.1.0_feature_yum_upload_SNAPSHOT.noarch.rpm
web-server-config-UAT-EMEA-uat.server.com-1.1.0_feature_yum_upload_SNAPSHOT.noarch.rpm
web-server-config-UAT-APAC-uat.server.com-1.1.0_feature_yum_upload_SNAPSHOT.noarch.rpm
web-server-config-PROD-APAC-prod1.server.com-1.1.0_feature_yum_upload_SNAPSHOT.noarch.rpm
web-server-config-PROD-APAC-prod2.server.com-1.1.0_feature_yum_upload_SNAPSHOT.noarch.rpm
我声明了一个要发布到的存储库,如下所示,但它试图上载到的URL与RPM名称不匹配

subprojects {
    publishing {
        repositories {
            ivy {
                credentials {
                    username yumDeployUser
                    password yumDeployPassword
                }
                url yumRepo
            }
        }
    }
}
对于每个RPM,我可以看到如下输出,其中RPM文件名与在文件系统上创建的文件名不同——事实上,对于上述所有RPM,它都会尝试上载到相同的路径

:web-server-config:generateDescriptorFileForWeb-server-config-DEV-EMEA-dev.server.comPublication
:web-server-config:publishWeb-server-config-DEV-EMEA-dev.server.comPublicationToIvyRepository
Upload https://artifactrepository/artifactory/yum/foo/myproject/web-server-config/1.1.0-feature_yum-upload-SNAPSHOT/web-server-config-1.1.0-feature_yum-upload-SNAPSHOT.rpm
缺少的是文件名的“环境区域主机名”部分。为什么要放弃这个

注意:我正试图遵循(的公认答案)的发布解决方案

解决方案: 根据Gradle文档,应该有一个[originalname]内置模式可用,但它似乎没有实现。作为一种解决方法,请按如下方式重写并使用[module]模式:

def rpmFile = tasks."buildRpm_${hostId}".outputs.getFiles().getSingleFile()
publishing.publications.create("${project.name}-${hostId}", IvyPublication) {
    artifact rpmFile
    module rpmFile.getName()
}
然后您的发布部分应该如下所示:

def addWebServerTasks(aProject, hostId) {
    aProject.with {
        task "buildRpm_${hostId}"(type: Rpm, dependsOn: "templates_${hostId}") {
        ...
        }
        publishing.publications.create("${project.name}-${hostId}", IvyPublication) {
            artifact tasks."buildRpm_${hostId}".outputs.getFiles().getSingleFile()
        }
    }
}
publishing {
    repositories {
        ivy {
            credentials {
                username "${citiEarUser}"
                password "${citiEarPassword}"
            }
            url "${yumRepo}"
            layout 'pattern', {
                artifact "[module]"
            }
        }
    }
}

由于尚未实现
[originalname]
占位符,您可以使用另一个占位符为自定义模式提供文件名:

publishing {
    publications {
        myPub(IvyPublication) {
            artifact myFile
            module myFile.name
            organisation 'myOrg' // required for some unknown reason
        }
    }
    repositories {
        ivy {
            url myUrl
            layout 'pattern', {
                artifact '[module]'
            }
        }
    }
}

我会编辑这篇文章,让它更清楚一点,但主要问题是所使用的上传URL与RPM工件文件名不匹配。你能尝试使用
layout'pattern',{artifact'[originalname]'}'
?它应该应用一个只使用文件名的通用模式。对不起-我不太清楚你的意思。。。[originalname]似乎不是一个有效的选项。根据上Gradle文档底部链接的常春藤图案,它是一个有效的占位符(自1.4版起)。这就是我想尝试的原因。是的,我也看到了。。。但不幸的是,我得到如下输出:
Uploadhttps://artifactrepository/artifactory/yum/foo/%5Boriginalname%5D
这很有效-谢谢!我将更新我的原始帖子,以显示适用于我的场景的解决方案。