如何使用自定义发布方案发布带有maven publish的自定义gradle插件?
我已经构建了一个定制的gradle插件,我正试图将其发布到一个私有的maven repo。我使用如何使用自定义发布方案发布带有maven publish的自定义gradle插件?,maven,gradle,gradle-plugin,Maven,Gradle,Gradle Plugin,我已经构建了一个定制的gradle插件,我正试图将其发布到一个私有的maven repo。我使用MavenPublication插件来实现这一点。在经历了很多麻烦之后,我查看了googleplayservices插件()的实现,并试图从中复制 事实证明,只有在添加名为pluginMaven的单个发布时,发布才能正常工作,因此我的配置必须如下所示: task sourcesJar(type: Jar, dependsOn: classes) { archiveClassifier = 's
MavenPublication
插件来实现这一点。在经历了很多麻烦之后,我查看了googleplayservices插件()的实现,并试图从中复制
事实证明,只有在添加名为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
}
}
}
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
}
}
}
将以下两项任务添加到我的项目中:
这是可行的,我可以把我的插件推到我的远程repo上,然后把它拉到我的示例客户端应用程序上。如果我想使用不同的发布名称(或多个发布名称),问题就会出现。在这种情况下,基于我的出版物构建的新任务将与“默认”任务一起添加。例如,如果我有以下发布块:
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项任务已添加到我的项目中:
当然,这也有问题:
- 调用“default”任务现在失败了,因为它的
version`等尚未定义artifactId、
- 调用自定义任务成功,但尝试从客户端应用程序使用插件失败,出现id为“mbpplugin”的
插件未找到
错误
不知何故,我现在需要能够为开发、登台和生产定义自定义出版物,但我真的不知道如何处理这个问题,也找不到任何关于如何做到这一点的文档。通过使用适当的参数找到了解决方法。我的任务如下:
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
}
}
}
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:PublishPluginEventPublicationToEventRepository-PversionArgs=-develop
然后通过调用不带version参数的任务来发布发布版本。当然,这不是最灵活和理想的解决方案,但目前它允许我继续前进。插件是完全不同的插件还是相同的插件?您的发布块对两个示例使用相同的插件GAV。现在使用相同的插件。我的想法是,我将发布越来越多的版本进行开发,然后只有在项目达到可接受的功能和稳定性水平时才运行发布任务。我看到你找到了解决方案,但我建议使用一个插件,并通过某种功能标志来抑制/禁用未完成的功能。Gradle就是这样做的