【问题标题】:Gradle migrate publishing from gradle 4.x to 5.x?Gradle 将发布从 gradle 4.x 迁移到 5.x?
【发布时间】:2019-05-26 04:25:43
【问题描述】:

如何将以下发布从 gradle 4 迁移到 5?

publishing {
    publications {
        foo(MavenPublication) {
            artifactId "foo"
            artifact jar

            pom.withXml {
                def dependenciesNode = asNode().appendNode('dependencies')

                def dependencyNode = dependenciesNode.appendNode('dependency')
                dependencyNode.appendNode('groupId', 'mygroup')
                dependencyNode.appendNode('artifactId', 'bar')
                dependencyNode.appendNode('version', '1.0')

            }
        }
    }
}

这适用于 gradle 4.5.1。但是对于 gradle 5.4.1,错误:

Execution failed for task ':publishFooPublicationToMavenLocal'.
> Failed to publish publication 'foo' to repository 'mavenLocal'
   > Invalid publication 'foo': artifactId is not a valid Maven identifier ([A-Za-z0-9_\-.]+).

【问题讨论】:

    标签: gradle publishing


    【解决方案1】:

    对于 gradle 4.8+,您必须将 publishing{} 块包含在 project.afterEvaluate

    project.afterEvaluate {
        publishing {
          publications {
            foo(MavenPublication) {
              artifactId "foo"
              artifact jar
    
              pom.withXml {
                def dependenciesNode = asNode().appendNode('dependencies')
    
                def dependencyNode = dependenciesNode.appendNode('dependency')
                dependencyNode.appendNode('groupId', 'mygroup')
                dependencyNode.appendNode('artifactId', 'bar')
                dependencyNode.appendNode('version', '1.0')
    
             }
          }
    
        }
    }
    

    你可以找到official doc here:

    在 Gradle 4.8 之前,发布 {} 块被隐式处理,就好像它内部的所有逻辑都是在评估项目后执行的。这很令人困惑,因为它是唯一一个以这种方式运行的块。作为 Gradle 4.8 中稳定工作的一部分,我们将弃用此行为并要求所有用户迁移他们的构建。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-08
      • 1970-01-01
      • 1970-01-01
      • 2019-10-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多