如何取消引用 Gradle 个出版物的集合?
How do I de-reference a collection of Gradle publications?
已解决 - 请参阅本文结尾 post。
单独发布 Ivy 出版物时,如何在我的子项目部分引用该集合?
我正在处理在嵌套迭代中构建 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()
}
}
}
这将创建 8 个 RPMS,文件名格式为: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
缺少的是文件名的 "env-region-hostname" 部分。为什么要删除它?
注意:我正在尝试遵循(接受的答案)
的发布解决方案
解决方案:
根据 Gradle 文档,应该有一个 [originalname] 内置模式可用,但似乎没有实现。作为解决方法,重写然后使用 [module] 模式,如下所示:
def rpmFile = tasks."buildRpm_${hostId}".outputs.getFiles().getSingleFile()
publishing.publications.create("${project.name}-${hostId}", IvyPublication) {
artifact rpmFile
module rpmFile.getName()
}
然后您的发布部分应该如下所示:
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]'
}
}
}
}
已解决 - 请参阅本文结尾 post。
单独发布 Ivy 出版物时,如何在我的子项目部分引用该集合?
我正在处理在嵌套迭代中构建 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()
}
}
}
这将创建 8 个 RPMS,文件名格式为: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
缺少的是文件名的 "env-region-hostname" 部分。为什么要删除它?
注意:我正在尝试遵循(接受的答案)
解决方案: 根据 Gradle 文档,应该有一个 [originalname] 内置模式可用,但似乎没有实现。作为解决方法,重写然后使用 [module] 模式,如下所示:
def rpmFile = tasks."buildRpm_${hostId}".outputs.getFiles().getSingleFile()
publishing.publications.create("${project.name}-${hostId}", IvyPublication) {
artifact rpmFile
module rpmFile.getName()
}
然后您的发布部分应该如下所示:
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]'
}
}
}
}