gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 17:51:36 32 4
gpt4 key购买 nike

我在一个名为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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com