许多建立我公司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>Repository
的MavenPublication
和MavenArtifactRepository
的每个组合创建一个发布任务,从而产生任务publishCoreComponentPublicationToBintrayRepository
和publishCoreComponentPublicationToGithubRepository
。