将Gradle升级到5.1.1后,我发现无法将bundleReleaseAar
作为工件添加到MavenPublication中。这是我的build.gradle的相关代码段:
apply plugin: 'maven-publish'
publishing {
publications {
aar(MavenPublication) {
groupId libraryGroupId
version libraryVersion
artifactId libraryArtifactId
artifact bundleReleaseAar
//artifact sourcesJar
//artifact packageJavadoc
}
}
}
此操作失败,并显示以下信息:
Could not get unknown property 'bundleReleaseAar' for object of type org.gradle.api.publish.maven.internal.publication.DefaultMavenPublication.
但是,当我运行bundleReleaseAar
时,我能够看到./gradlew tasks
确实存在,并且我可以很好地执行该任务。
是什么使它现在无法在我的部署中用作工件?
答案 0 :(得分:6)
简短回答:
您需要将发布{}块封装在项目内。afterEvaluate如下:
project.afterEvaluate {
publishing {
publications {
aar(MavenPublication) {
groupId libraryGroupId
version libraryVersion
artifactId libraryArtifactId
artifact bundleReleaseAar
//artifact sourcesJar
//artifact packageJavadoc
}
}
}
}
长答案:
在gradle 4.8版之前,对发布块进行了隐式处理,就好像在评估项目后已执行了其中的所有逻辑一样。这只是以这种方式运行的块,并且出于一致性的考虑,此行为在gradle版本4.8之后已终止。 bundleReleaseAar任务似乎仅在项目评估完成后才可用,因此为了保持行为,必须将其显式封装在project.afterEvaluate {}
中参考:https://docs.gradle.org/current/userguide/upgrading_version_4.html#rel4.8:deferred_configuration
答案 1 :(得分:0)
我从以下位置修复了此问题更改工件:
artifact bundleReleaseAar
收件人:
artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")
这可以帮助我Gradle同步成功,但是我必须在./gradlew publish
之前直接致电assembleRelease
答案 2 :(得分:0)
我通过在afterEvaluate闭包中调用工件函数来解决它,问题是工件函数不能延迟地处理所有配置
publishing {
publications {
aar(MavenPublication) {
groupId libraryGroupId
version libraryVersion
artifactId libraryArtifactId
afterEvaluate {
artifact bundleReleaseAar
//artifact sourcesJar
//artifact packageJavadoc
}
}
}
}
引用https://github.com/moberwasserlechner/capacitor-oauth2/issues/10
答案 3 :(得分:0)
如果您有多种口味,则需要使用 bundle