我有一个build.gradle
文件,其中包含我正在发布的工件,符合Ivy publishing documentation中提供的指南。
publishing {
publications {
ivy(IvyPublication) {
from components.java
descriptor.withXml {
asNode().info[0].appendNode("description", description)
}
}
}
}
我有一个单独的PublishToIvyRepository
任务,我想配置它以便它进入另一个正常的存储库,但使用与上面代码相同的发布。我最初的尝试是这样的:
task publishToIvyLocal(type: PublishToIvyRepository) {
repository = mySpecialRepository
publication = project.publishing.publications[0]
}
但是,这似乎不起作用。如果我把它放在上面的publishing {}
块之前,我会收到以下错误:
无法配置'发布'访问后的扩展名。
我猜测project.publishing.publications[0]
不是重复使用此出版物的最佳方式。
如何在自定义PublishToIvyRepository任务中重用IvyPublication?
答案 0 :(得分:2)
无需自行创建PublishToIvyRepository
任务。
应用
'ivy-publish'
插件执行以下操作:
- [...]
- 建立规则,为添加的每个
PublishToIvyRepository
的组合自动创建IvyPublication
任务(请参阅第35.2节“出版物”),并添加每个IvyArtifactRepository
(参见第35.3节, “存储库”)。
因此,只需将您的出版物与两个存储库一起添加,就会创建两个任务,一个用于发布每个存储库的出版物。
创建的任务名为
publish«PUBNAME»PublicationTo«REPONAME»Repository
,此示例为publishIvyJavaPublicationToIvyRepository
。
一些示例代码:
publishing {
publications {
mySpecial(IvyPublication) {
// configure publication
}
}
repositories {
ivy {
name = 'first'
// configure first repository
}
ivy {
name = 'second'
// configure second repository
}
}
}
这应该创建以下任务:
publishMySpecialPublicationToFirstRepository
publishMySpecialPublicationToSecondRepository
关于存储库名称:
此存储库的名称。名称在存储库集中必须是唯一的。如果未提供,则为存储库提供默认名称。
答案 1 :(得分:1)
鉴于您的代码示例,我同意lu.koerfer的回答,但如果您确实需要自定义发布任务,则可以使用project.afterEvaluate
在配置后访问publishing
容器:
project.afterEvaluate
{
customPublicationTask.publication = project.publishing.publications["ivy"]
// a publication can be accessed by its name
}