当前位置:   article > 正文

使用maven-publish插件发布Android工件(kts)_software components will not be created automatica

software components will not be created automatically for maven publishing f

本文参考 Android Developers 相关文档(源地址).


在项目模块化的过程中, 各个模块单独进行开发, 最终在上层模块引入.
为了引入方便和版本管理, 通常会使用 maven 来管理各个底层模块.

如果你的项目是使用 Gradle 构建的, 那么 Gradle 提供了一个很方便的插件用于发布模块工件: maven-publish , 我们参考 Android Developer 的说明, 可以很快速的在使用 Groovy 的 Gradle 中实现发布. 不过遗憾的是官方文档中没有提供使用 kotlin-kts 相关的指引. 最新的官方文档已提供配置实例, 请参考官方文档)!

在研究后整理了以下关于发布 library 为 Maven 工件的配置, 请添加到 Library Module 的 build.gradle.ktx 中:

  1. plugins {
  2. id("com.android.library")
  3. id("maven-publish") // 添加插件
  4. ...
  5. }
  6. // 创建一个task来发布源码
  7. tasks.register<Jar>("sourcesJar") {
  8. archiveClassifier.set("sources")
  9. val sources = android.sourceSets.map { set -> set.java.getSourceFiles() }
  10. from(sources)
  11. }
  12. afterEvaluate {
  13. publishing {
  14. repositories {
  15. maven {
  16. // isAllowInsecureProtocol = true // 如果Maven仓库仅支持http协议, 请打开此注释
  17. url = uri("https://your-repository") // 请填入你的仓库地址
  18. authentication {
  19. create<BasicAuthentication>("basic")
  20. }
  21. credentials {
  22. username = "your-username" // 请填入你的用户名
  23. password = "your-password" // 请填入你的密码
  24. }
  25. }
  26. }
  27. publications {
  28. create<MavenPublication>("product") {
  29. from(components["release"])
  30. groupId = "your-group-id" // 请填入你的组件名
  31. artifactId = "your-artifact-id" // 请填入你的工件名
  32. version = "your-version" // 请填入工件的版本名
  33. artifact(tasks["sourcesJar"]) // 打包源码到工件中
  34. pom {
  35. name.set("name") // (可选)为工件取一个名字
  36. url.set("https://xxx") // (可选)网站地址
  37. developers {
  38. developer {
  39. name.set("name") // (可选)开发者名称
  40. email.set("email") // (可选)开发者邮箱
  41. }
  42. }
  43. }
  44. }
  45. }
  46. }
  47. }

添加完配置之后, 可以执行以下 gradle task 发布工件(假设 Module 名称为 lib):
gradle clean :lib:build :lib:sourcesJar :lib:publish

如果在终端中使用 gradle-wrapper , 则可以使用:

  • MacOS/Linux: ./gradlew clean :lib:build :lib:sourcesJar :lib:publish
  • Windows: gradlew.bat clean :lib:build :lib:sourcesJar :lib:publish

近期升级 AGP 到 7.1.2 时发现出现了以下提示:

Software Components will not be created automatically for Maven publishing from Android Gradle Plugin 8.0. To opt-in to the future behavior, set the Gradle property android.disableAutomaticComponentCreation=true in the gradle.properties file or use the new publishing DSL.

估计在 AGP 8.0 版本之后上述的方法会失效, 到时候再看看有没有相关文档补充~


更新: 关于适配新版 AGP 的说明:

由于前述末尾中的提示让人烦心, 所以看了一下资料更新了一下发布功能:

更新步骤:

  1. 在项目的 gradle.properties 中添加一下配置:

    android.disableAutomaticComponentCreation=true
    
  2. 在 Library Module 中的 build.gradle.kts 文件中补充:

    1. android {
    2. ...
    3. publishing {
    4. singleVariant("release") {
    5. withSourcesJar()
    6. }
    7. }
    8. }
  3. 因为第二步中已经配置了发布源码, 所以可以将前述中添加的打包源码的 task(sourcesJar) 给移除掉;

  4. 修改发布逻辑:

    1. afterEvaluate {
    2. publishing {
    3. repositories {
    4. maven {
    5. // isAllowInsecureProtocol = true // 如果Maven仓库仅支持http协议, 请打开此注释
    6. url = uri("https://your-repository") // 请填入你的仓库地址
    7. authentication {
    8. create<BasicAuthentication>("basic")
    9. }
    10. credentials {
    11. username = "your-username" // 请填入你的用户名
    12. password = "your-password" // 请填入你的密码
    13. }
    14. }
    15. }
    16. publications {
    17. create<MavenPublication>("release") {
    18. from(components["release"])
    19. groupId = "your-group-id" // 请填入你的组件名
    20. artifactId = "your-artifact-id" // 请填入你的工件名
    21. version = "your-version" // 请填入工件的版本名
    22. pom {
    23. name.set("name") // (可选)为工件取一个名字
    24. url.set("https://xxx") // (可选)网站地址
    25. developers {
    26. developer {
    27. name.set("name") // (可选)开发者名称
    28. email.set("email") // (可选)开发者邮箱
    29. }
    30. }
    31. }
    32. }
    33. }
    34. }
    35. }
  5. 完成.



作者:youthyJ
链接:https://www.jianshu.com/p/7b6d59942a4f
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/845530
推荐阅读
相关标签
  

闽ICP备14008679号