构建.关于Maven Publish Gradle插件的问题



许多建立我公司Gradle基础设施的前DevOps和Dev在我加入之前就已经离开了,所以目前没有人知道他们做了什么。我是一个想学习Gradle的Maven人,所以我有几个问题,公司里似乎没有人知道答案。例如,我在build.gradle中有以下内容

jar {
manifest {
attributes 'artifactId': artifactId,
'groupId': project.group,
'version': project.version
}
baseName artifactId
}
publishing {
publications {
coreComponent(MavenPublication) {
artifactId artifactId
from components.java
}
}
}

通常我希望看到maven(MavenPublication) {},但为什么是coreComponent(MavenPublication) {}?我在哪里/什么/如何知道coreComponent是什么?

通常我希望看到maven(MavenPublication) {},但为什么是coreComponent(MavenPublication) {}?我在哪里/什么/如何知道coreComponent是什么?

这只是出版物的名称,只有当您的项目有多个可以单独发布的出版物时,这一点才很重要。Gradle将语句coreComponent(MavenPublication) {...}转换为对PublicationContainer的方法create(String name, Class<U> type, Action<? super U> configuration)的调用。该调用创建一个类型为MavenPublication、名称为'coreComponent'的新发布,并使用传递的configuration对其进行配置。

您可以为发布选择任何名称,它主要用于生成发布任务的名称,例如publish<PubName>PublicationToMavenLocal。对您的项目调用gradle tasks,您会看到它包含一个名为publishCoreComponentPublicationToMavenLocal的任务。由于许多项目只有一个发布,它们使用'maven'作为发布名称,但这远不是一个真正的约定。

类似的机制用于发布存储库,因为任何发布都可以发布到多个存储库。在内部,存储库有另一个(较旧的(API,因此不能使用上面的<name>(<Type>)表示法。相反,您可以使用方法maven()创建类型为MavenArtifactRepository的存储库,并使用配置操作为其分配名称:

publishing {
repositories {
maven {
name = 'bintray'
// ...
}
maven {
name = 'github'
// ...
}
}
}

然后,Gradle为名称为publish<PubName>PublicationTo<RepoName>RepositoryMavenPublicationMavenArtifactRepository的每个组合创建一个发布任务,从而产生任务publishCoreComponentPublicationToBintrayRepositorypublishCoreComponentPublicationToGithubRepository

最新更新