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

标签 java android maven gradle maven-publish

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

之前在我们库的 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 --infopublish 的输出:

> 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 --infopublishRelease 时,它会记录更多内容,并且实际上会编译库,但它不会“发布”它。我最终得到这样的目录结构:

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

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

请帮忙?互联网上充满了讨论 maven-publish 插件的复杂 gradle 文档,但没有一个是针对 Android 的,而且似乎没有一个可以在 Android 库的上下文中工作。

最佳答案

经过多次尝试,我设法使用以下 gradle 配置解决了这个问题:

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"
            }
        }
    }
}

进行此更改后,您需要运行 gradlepublishReleasePublicationToMavenRepository 而不是 uploadArchives 然后它就可以工作了。

关于java - 升级到Gradle 7后如何将android库发布到本地目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68678583/

相关文章:

java - 从 4k 显示器拖动到全高清显示器时,应用程序变黑

java - 使用Java抓取网页数据

android - 哪个对象对应于单击的标记? Mapbox onInfoWindowClick

java - 如何从 .jar 文件中读取 PDF

java - sbt 有 M2_HOME 模拟吗?

rest - 使用 jaxrs+apache+eclipse 获取 rest api 时返回 404,静态 index.html 工作正常

java - 使用 Gson 在 Java 中反序列化 RouteXL 响应很困难,因为 RouteXL 返回多个对象而不是数组

java - Spring安全上下文返回另一个用户

android - 如何使用 xml 或使用 java 更改按钮的形状?

android - 俄语不能正确地进入 android