不再能够在 MavenPublication 中使用 bundleReleaseAar
No longer able to use bundleReleaseAar in MavenPublication
将 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.
但是,当我 运行 ./gradlew tasks
时,我能够看到 bundleReleaseAar
确实存在,并且我可以很好地执行该任务。
现在是什么阻止它在我的部署中用作工件?
我修复了这个问题更改神器来自:
artifact bundleReleaseAar
至:
artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")
这帮助我 Gradle 同步成功,但我必须在 ./gradlew publish
之前直接调用 assembleRelease
简答:
您需要将发布 {} 块包含在 project.afterEvaluate 中,如下所示:
project.afterEvaluate {
publishing {
publications {
aar(MavenPublication) {
groupId libraryGroupId
version libraryVersion
artifactId libraryArtifactId
artifact bundleReleaseAar
//artifact sourcesJar
//artifact packageJavadoc
}
}
}
}
长答案:
在 gradle 4.8 版之前,发布块被隐式处理,就好像它里面的所有逻辑都是在项目评估后执行的。这只是块以这种方式表现,为了保持一致性,这种行为已停止 post gradle 4.8 版。 bundleReleaseAar 任务似乎只有在项目评估完成后才可用,因此为了保持行为,它必须明确包含在 project.afterEvaluate{}
中
参考:https://docs.gradle.org/current/userguide/upgrading_version_4.html#rel4.8:deferred_configuration
我通过将 artifact 函数调用到 afterEvaluate 闭包中解决了这个问题,问题是 artifact 函数不会延迟处理所有配置
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
如果你有多种口味,那么你需要使用 bundleReleaseAar
将 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.
但是,当我 运行 ./gradlew tasks
时,我能够看到 bundleReleaseAar
确实存在,并且我可以很好地执行该任务。
现在是什么阻止它在我的部署中用作工件?
我修复了这个问题更改神器来自:
artifact bundleReleaseAar
至:
artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")
这帮助我 Gradle 同步成功,但我必须在 ./gradlew publish
简答:
您需要将发布 {} 块包含在 project.afterEvaluate 中,如下所示:
project.afterEvaluate {
publishing {
publications {
aar(MavenPublication) {
groupId libraryGroupId
version libraryVersion
artifactId libraryArtifactId
artifact bundleReleaseAar
//artifact sourcesJar
//artifact packageJavadoc
}
}
}
}
长答案:
在 gradle 4.8 版之前,发布块被隐式处理,就好像它里面的所有逻辑都是在项目评估后执行的。这只是块以这种方式表现,为了保持一致性,这种行为已停止 post gradle 4.8 版。 bundleReleaseAar 任务似乎只有在项目评估完成后才可用,因此为了保持行为,它必须明确包含在 project.afterEvaluate{}
中参考:https://docs.gradle.org/current/userguide/upgrading_version_4.html#rel4.8:deferred_configuration
我通过将 artifact 函数调用到 afterEvaluate 闭包中解决了这个问题,问题是 artifact 函数不会延迟处理所有配置
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
如果你有多种口味,那么你需要使用 bundle