gradle - 插件如何以编程方式配置maven-publish发布并允许build.gradle修改它

标签 gradle

我在一个名为parent的插件中进行了项目范围的设置,该插件尝试应用maven-publish插件,然后以编程方式配置发布扩展。这似乎有效,但是当我在 build.gradle 脚本中应用此插件时,我无法配置发布扩展来设置项目特定的发布。

我收到错误:

  Cannot configure the 'publishing' extension after it has been accessed.

我的目的是在父插件中设置发布存储库,然后让每个 build.gradle 脚本添加适当的发布。

有办法做到这一点吗?

当前 ParentPlugin.groovy 看起来像:

def void apply(Project project) {
    project.getProject().apply plugin: 'maven-publish'

     def publishingExtension = project.extensions.findByName('publishing')

    publishingExtension.with {
        repositories {
            maven {
                mavenLocal()

                credentials {
                    username getPropertyWithDefault(project.getProject(), 'publishUserName', 'dummy')
                    password getPropertyWithDefault(project.getProject(), 'publishPassword', 'dummy')
                }

            }
        }
    }
}

我的客户端 build.gradle 在尝试配置发布扩展时失败。

apply plugin: 'parent'

publishing {
        publications {
            mavenJava(MavenPublication) {
                groupId 'agroup'
                artifactId 'anartifactid'
                version '1.0.0-SNAPSHOT'

                from components.java
            }
        }
}

这可能吗?我应该有其他方法来解决这个问题吗?

最佳答案

有关插件 maven-publish 的存储库和出版物的注意事项:

主题:如何解决这个令人困惑的 gradle fatal error 消息: 访问“发布”扩展后无法对其进行配置

首先要尝试的事情(深层魔法): (注意“project.”前缀是可选的) -- 配置发布和存储库如下所示:

project.publishing {publications {...}}
project.publishing {repositories {...}}

但是喜欢这个推荐的风格:

project.publishing.publications {...}
project.publishing.repositories {...}

对于 gradle 专家来说,解释这个技巧为何有效会很有启发性。

另一个已知的解决方法是确保每个插件的应用 maven-publish 与以下项目位于同一项目代码块中 项目.发布.存储库和项目.发布.出版物。 但这比第一个尝试更复杂、更难做, 因为默认情况下 CBF 应用 maven-publish 并对其进行第二次应用 本身可能会导致相同的错误。 maven-publish 通常应用在 pub/scripts/publish-maven.gradle 中, 除非 PUB_PUBLISH_MAVEN 设置为覆盖该文件位置, 在这种情况下,调用者应该应用插件 maven-publish。 请参阅https://orareview.us.oracle.com/29516818为什么这不是优选的 可以在仍然使用 CBF 的同时完成解决方法(对于项目 emcapms)。

附注有一天我会用最少的代码示例来写这个。但我现在将这一来之不易的知识放在那里,以避免其他人在这个常见的 Maven 发布问题上浪费时间。

关于gradle - 插件如何以编程方式配置maven-publish发布并允许build.gradle修改它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21190230/

相关文章:

gradle - 从命令提示符将属性传递给自定义gradle任务

android - 使用 Android Studio 的 android 项目没有运行配置

spring-boot - Spring Boot Thin Jar with Gradle无法正常工作

java - 使用 Gradle 调试/发布 Java 构建的示例?

android - 错误:无法解决:com.android.support:appcompat-v7:25.1.0

android - MaterialContainerTransform Unresolved reference

gradle - 在另一台机器上构建并运行gradle项目

java - 如何在构建 java 项目期间将 *.class 文件打开为依赖项?

Gradle publishToMavenLocal 不会将 jar 复制到本地 Maven 存储库

android - 无法增强数据核心