【问题标题】:How to publish a custom gradle plugin with maven-publish using custom publication schemes?如何使用自定义发布方案通过 maven-publish 发布自定义 gradle 插件?
【发布时间】:2020-04-09 00:44:09
【问题描述】:

我已经构建了一个自定义 gradle 插件,我正在尝试将其发布到私有 maven 存储库。我使用MavenPublication 插件来完成此操作。经过一番麻烦后,我查看了 google play services 插件 (https://github.com/google/play-services-plugins/blob/master/google-services-plugin/publish.gradle) 的实现,并尝试从中复制。

事实证明,只有当我添加一个名为 pluginMaven 的发布时,发布才能正常工作,所以我的配置必须如下所示:

task sourcesJar(type: Jar, dependsOn: classes) {
    archiveClassifier = 'sources'
    from sourceSets.main.allSource
}

publishing {
    publications {
        pluginMaven(MavenPublication) {
            groupId = 'com.magicbluepenguin'
            artifactId = 'mbpplugin'
            version = '1.0.0'
            artifact sourcesJar
        }
    }
}

这将以下 2 个任务添加到我的项目中:

这可行,我可以将我的插件推送到我的远程仓库,然后将其拉出并应用于我的示例客户端应用程序。如果我想使用不同的出版物名称(或多个),问题就开始了。在这种情况下,基于我的出版物构建的新任务将与“默认”任务一起添加。例如,如果我有以下发布块:

task sourcesJar(type: Jar, dependsOn: classes) {
    archiveClassifier = 'sources'
    from sourceSets.main.allSource
}

publishing {
    publications {
        pluginMavenDevelop(MavenPublication) {
            groupId = 'com.magicbluepenguin'
            artifactId = 'mbpplugin'
            version = '1.0.0'
            artifact sourcesJar
        }
    }
}

以下 4 个任务被添加到我的项目中:

当然也有这样的问题:

  • 现在调用“默认”任务失败,因为它的 artifactId,version` 等尚未定义。

  • 调用自定义任务成功,但尝试从客户端应用程序使用插件失败并出现Plugin with id 'mbpplugin' not found 错误。

不知何故,我现在需要能够为开发、登台和生产定义自定义出版物,但我真的不知道如何处理这个问题,也找不到任何有关如何执行此操作的文档。

【问题讨论】:

  • 插件是完全不同的插件还是同一个插件?您的发布块对两个示例使用相同的插件 GAV。
  • 同一个插件。我的想法是,我将发布不断增加的版本进行开发,然后仅当项目达到可接受的功能和稳定性水平时才运行发布任务。
  • 我看到您找到了解决方案,但我建议使用单个插件并通过某种功能标志抑制/禁用未就绪功能。这就是 Gradle 通过enableFeaturePreview("...") 实现的方式

标签: maven gradle gradle-plugin


【解决方案1】:

通过使用适当的参数找到了解决方法。我的任务现在如下所示:

task sourcesJar(type: Jar, dependsOn: classes) {
    archiveClassifier = 'sources'
    from sourceSets.main.allSource
}

publishing {
    publications {
        pluginMaven(MavenPublication) {
            groupId = 'com.magicbluepenguin'
            artifactId = 'mbpplugin'
            if (project.hasProperty('versionArgs')) {
                version = version + project.findProperty('versionArgs')
            }
            artifact sourcesJar
        }
    }
}

有了这个,我现在可以通过调用以下命令继续将我的插件发布为开发版本:

./gradlew buildSrc:publishPluginMavenPublicationToMavenRepository -PversionArgs=-develop

然后通过调用不带版本参数的任务来发布发布版本。当然,这不是最灵活和最理想的解决方案,但现在它可以让我继续前进。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 2016-09-28
    相关资源
    最近更新 更多