代码之家  ›  专栏  ›  技术社区  ›  Orion Edwards

如何在升级到Gradle 7后将android库发布到本地目录

  •  0
  • Orion Edwards  · 技术社区  · 3 年前

    昨天,我将安卓工作室升级为Arctic Fox,从6级升级到7级。 Gradle 7删除了“maven”插件,作为自动化/CI构建的一部分,我的团队一直在使用该插件将我们拥有的Android库打包到AAR文件中。

    以前在我们图书馆的 build.gradle 我们拥有的文件

    apply plugin: 'maven'
    ...
    android {
     // normal android library stuff here
    }
    ...
    uploadArchives {
        repositories {
            mavenDeployer {
                repository(url: "file://$projectDir/deploy")
            }
        }
    
    }
    

    结果是我们可以跑了 gradle uploadArchives ,并且一个漂亮的maven目录结构将输出到 $projectDir/deploy 文件夹我们的CI系统可以接收并分发它,一切都很好。

    (作为参考,它看起来是这样的,我希望用Gradle 7复制它)

    deploy/
      com/
        mycompany/
          mylibrary/
            maven-metadata.xml
            maven-metadata.xml.sha1
            1.0.0/
              mylibrary.aar
              mylibrary.aar.sha1
              mylibrary-1.0.0.pom
              mylibrary-1.0.0.pom.sha1
    

    (.md5文件也在其中,但并不重要)

    然而,Gradle 7删除了所有这些内容,并告诉我们使用 maven-publish 插件,我无法使用它。

    这是我目前最大的努力,基于 Google's page here

    apply plugin: 'maven-publish'
    ...
    android {
     // normal android library stuff here
    }
    ...
    afterEvaluate {
        publishing {
            publications {
                release(MavenPublication) {
                    from components.release
                }
                debug(MavenPublication) {
                    from components.debug
                }
            }
        }
        repositories {
            maven {
                url = layout.buildDirectory.dir('deploy')
            }
        }
    }
    

    然而,当运行此操作时,它不会产生所需的输出。以下是的输出 ./gradlew --info publish :

    > Task :mylibrary:publish UP-TO-DATE
    Skipping task ':mylibrary:publish' as it has no actions.
    :mylibrary:publish (Thread[Execution worker for ':',5,main]) completed. Took 0.002 secs.
    

    当我跑步时 ./gradlew --info publishRelease ,然后它会记录更多,并实际编译库,但它不会“发布”它。我最终得到了这样的目录结构:

    mylibrary/
      build/
        publications/
          release/
            pom-default.xml
            module.json
        outputs/
          aar/
            mylibrary-release.aar
    
    

    没有 deploy 文件夹,并且没有版本化的maven文件夹层次结构。

    请帮忙?互联网上充斥着关于maven发布插件的复杂gradle文档,但没有一个是针对Android的,也没有一个似乎在Android库的上下文中工作。

    0 回复  |  直到 3 年前
        1
  •  3
  •   Orion Edwards    3 年前

    经过多次尝试,我用以下渐变配置解决了这个问题:

    apply plugin: 'maven-publish'
    ...
    android {
     // normal android library stuff here
    }
    ...
    afterEvaluate {
        publishing {
            publications {
                release(MavenPublication) {
                    from components.release
                }
                debug(MavenPublication) {
                    from components.debug
                }
            }
            // note repositories goes under publishing
            repositories {
                maven {
                    url = "file://$projectDir/deploy"
                }
            }
        }
    }
    

    此更改后,您需要运行 gradle publishReleasePublicationToMavenRepository 而不是 uploadArchives 然后它就工作了。