我已经构建了一个自定义的gradle插件,试图将其发布到私有Maven存储库。我使用MavenPublication
插件来完成此操作。遇到很多麻烦之后,我研究了Google Play服务插件(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,
版等。
调用自定义任务成功,但是尝试从客户端应用程序使用插件失败,并显示Plugin with id 'mbpplugin' not found
错误。
现在,我需要以某种方式来定义用于开发,登台和生产的自定义出版物,但是我真的不知道如何处理此问题,也找不到任何有关如何执行此操作的文档。
答案 0 :(得分: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
然后通过调用不带有version参数的任务来发布发行版本。当然,这不是最灵活,最理想的解决方案,但现在,它使我可以继续前进。