【发布时间】: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