【发布时间】:2017-09-24 18:00:19
【问题描述】:
我的 build.gradle 文件中有一个如下所示的发布配置块
publishing {
publications {
maven(MavenPublication) {
groupId "groupId"
artifactId 'artifactId'
version "4.0"
artifact "$buildDir/outputs/aar/artifact-release.aar"
artifact releaseJavadocsJar
// Generate pom file so that the artifact dependencies can be fetched automatically.
pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')
configurations.compile.allDependencies.each { dependency ->
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', dependency.group)
dependencyNode.appendNode('artifactId', dependency.name)
dependencyNode.appendNode('version', dependency.version)
}
}
}
}
}
注意releaseJavadocsJar,这是一个这样定义的gradle任务:
android.libraryVariants.all { variant ->
if (variant.name == 'release') {
def taskJavadoc = task("releaseJavadocs", type: Javadoc) {
source = variant.javaCompile.source
classpath = files(((Object) android.bootClasspath.join(File.pathSeparator)))
classpath += files(variant.javaCompile.classpath.files)
}
task("releaseJavadocsJar", type: Jar) {
classifier = 'javadoc'
from taskJavadoc.destinationDir
}
}
}
当我同步 gradle 这一行时
artifact releaseJavadocsJar
来自该出版物的抱怨
Error:(62, 0) Could not get unknown property 'releaseJavadocsJar' for object of type org.gradle.api.publish.maven.internal.publication.DefaultMavenPublication.
这意味着当 gradle 同步发生时,我的动态创建的任务还不存在。
有没有办法解决这个问题?
【问题讨论】:
-
请尝试将定义为
releaseJavadocsJar的代码块移到publishing块之前。 -
定义在发布块之前,但发布块似乎无论如何都会被首先调用
-
有一刻我以为您可以更改插件顺序,但这无济于事。您可以尝试将
publishing块移动到project.afterEvaluate闭包。在此块中,对整个项目进行评估,并应添加所有任务。可以试一试吗? -
感谢您的建议。不幸的是,这也不起作用,因为
libraryVariants.all本身似乎被评估得很晚。我添加了一些日志语句来确认这一点,并看到即使在发布之前访问了android块,libraryVariants.all不是 -
好的,所以帮不了你。我不是android开发人员,所以我什至无法尝试。但或多或少这是我要前进的方向 - 全部评估的顺序。
标签: android gradle maven-publish