Swa*_*nil 8 android gradle maven-publish
我有一个包含多个模块的 Android 项目,我想将它们发布到自托管的 maven 存储库。我早些时候将发布代码存在于各个模块中,并且一切正常。我现在正在尝试将发布代码移动到项目中,build.gradle以便我可以重用代码。我的各个模块中的代码是:
afterEvaluate {
        // To avoid publishing the applications inside the project...
        if (!plugins.hasPlugin("android")) {
            publishing {
                publications {
                    mavenAar(MavenPublication) {
                        artifactId "$project.name"
                        from components.release
                    }
                }
                repositories {
                    .... My repo details and credentials .......
                }
            }
        }
    }
一切都很好。当我将代码移至项目时build.gradle,如下所示:
subprojects {
    apply plugin: 'maven-publish'
    afterEvaluate {
        // To avoid publishing of the applications inside the project ..
        if (!plugins.hasPlugin("android")) {
            publishing {
                publications {
                    mavenAar(MavenPublication) {
                        artifactId "$project.name"
                        from components.release
                    }
                }
                repositories {
                    .... My reop details and creddentials  .....
                }
            }
        }
    }
}
运行publish任务时,我开始收到以下错误:
A problem occurred configuring project ':mymodule'.
> Could not get unknown property 'release' for SoftwareComponentInternal set of type org.gradle.api.internal.component.DefaultSoftwareComponentContainer.
有人可以指出这里的问题吗?
我使用这一行解决了我的问题:
from components.findByName('release')
你应该把它放在这里:
afterEvaluate {
    publishing {
        publications {
            release(MavenPublication) {
                from components.findByName('release')
                //...
            }
        }
    }
}
检查您的项目级别 build.gradle 并确保 gradle 类路径是
classpath "com.android.tools.build:gradle:4.1.2" or above.
这对我有用。
正如其他人提到的,您还可以通过以下方式检查组件名称:
task comps {
    afterEvaluate {
        println("Components: " + components*.name)
    }
}
我在更新 Jitpack 的 AGP 后遇到了这个问题。MavenPublication 块和components.release行似乎都使用您的构建变体名称。因此,如果您有标准的调试和发布变体,它将如下所示:
afterEvaluate {
    publishing {
        publications {
            release(MavenPublication) {
                from components.release
                groupId = 'com.my.group'
                artifactId = 'id'
                version = Config.libraryVersion
            }
        }
    }
}
但是,如果您有一个名称不是release的构建变体,则需要使用它:
afterEvaluate {
    publishing {
        publications {
            productionRelease(MavenPublication) {
                from components.productionRelease
                groupId = 'com.my.group'
                artifactId = 'id'
                version = Config.libraryVersion
            }
        }
    }
}
这对我有用,我添加了另一个afterEvaluate。
subprojects {
  apply plugin: 'maven-publish'
  afterEvaluate {
    // To avoid publishing of the applications inside the project ..
    if (!plugins.hasPlugin("android")) {
        publishing {
            publications {
                mavenAar(MavenPublication) {
                    afterEvaluate {
                       artifactId "$project.name"
                       from components.release
                    }
                }
            }
            repositories {
                .... My reop details and creddentials  .....
            }
        }
     }
   }
}
小智 5
这两个答案都不适合我。如果我不尝试对其进行逆向工程而不是阅读文档,我就不是我自己了:)
事实证明,components.release当我们构建 时,这工作得很好com.android.library,但在使用插件构建时则不太好com.android.application。如果 gradle 说它没有组件release,那么让我们看看它有哪些组件:
task comps {
    afterEvaluate {
        println("Components: " + components*.name)
    }
}
打印./gradlew :app:comps以下内容:
Components: [debug_aab, debug_apk, release_aab, release_apk]
如果在android.buildTypes {}闭包中我定义了另一种类型,例如freebie,./gradlew :app:comps将打印以下内容:
Components: [debug_aab, debug_apk, release_aab, release_apk, freebie_aab, freebie_apk]
看来 gradle 插件会获取您的构建变体的名称并从中创建两个变体:${variant}_apk和${variant}_aab。
现在要解决最初的问题,替换
publications {
    mavenAar(MavenPublication) {
        artifactId "$project.name"
        from components.release
    }
}
和
publications {
    mavenAar(MavenPublication) {
        artifactId "$project.name"
        from components.release_apk
    }
}
或使用其中_aab之一。如果您使用的不是 的其他变体release,请from components.release_apk相应地更换该部件。
等级:7.3
AndroidStudio:2021.2.1 金丝雀 4(花栗鼠)
ka3*_*3ak -2
我遇到了同样的错误。用下面的代码解决了它:
afterEvaluate {
    publishing {
        publications {
            release(MavenPublication) {
                groupId = 'mygroup'
                artifactId = 'common'
                version = '1.0.0'
                artifact(bundleReleaseAar)
            }
        }
    }
}
看来您必须指定 AAR 文件的确切路径。您可以在此答案中找到更多详细信息: /sf/answers/4265576521/
| 归档时间: | 
 | 
| 查看次数: | 728 次 | 
| 最近记录: |