首页 > 解决方案 > 关于 Maven Publish Gradle 插件的问题?

问题描述

在我加入之前,许多建立我公司 Gradle 基础架构的前 DevOps 和开发人员已经离开,所以目前没有人知道他们做了很多事情。我是一名尝试学习 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

标签: gradlebuild.gradle

解决方案


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

它只是出版物的名称,仅当您的项目有多个可能单独发布的出版物时才重要。Gradle 将语句coreComponent(MavenPublication) {...}转换为create(String name, Class<U> type, Action<? super U> configuration)PublicationContainer. 该调用创建一个类型MavenPublication和名称的新发布,'coreComponent'​​并使用传递的configuration.

您可以为发布选择任何名称,它主要用于生成发布任务的名称,例如publish<PubName>PublicationToMavenLocal. 调用gradle tasks您的项目,您将看到它包含一个名为publishCoreComponentPublicationToMavenLocal. 由于许多项目只有一个出版物,因此它们'maven'用作出版物名称,但这与真正的约定相去甚远。

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

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

MavenPublication然后,Gradle 为 a和 a的每个组合创建一个发布任务,MavenArtifactRepository名称为publish<PubName>PublicationTo<RepoName>Repository,从而生成任务publishCoreComponentPublicationToBintrayRepositorypublishCoreComponentPublicationToGithubRepository


推荐阅读