Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用自定义发布方案发布带有maven publish的自定义gradle插件?_Maven_Gradle_Gradle Plugin - Fatal编程技术网

如何使用自定义发布方案发布带有maven publish的自定义gradle插件?

如何使用自定义发布方案发布带有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

我已经构建了一个定制的gradle插件,我正试图将其发布到一个私有的maven repo。我使用
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”任务现在失败了,因为它的
    artifactId、
    version`等尚未定义

  • 调用自定义任务成功,但尝试从客户端应用程序使用插件失败,出现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就是这样做的