Gradle Maven发布插件配置引用了动态创建的Gradle任务 [英] Gradle maven publish plugin config has reference to dynamically created gradle task

查看:293
本文介绍了Gradle Maven发布插件配置引用了动态创建的Gradle任务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的build.gradle文件中有一个发布配置块

I have a publication config block that looks like this in my build.gradle file

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任务:

note the releaseJavadocsJar, which is a gradle task defined like this:

  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此行

When I sync gradle this line

   artifact releaseJavadocsJar

出版物中的

抱怨

from the publication complains that

Error:(62, 0) Could not get unknown property 'releaseJavadocsJar' for object of type org.gradle.api.publish.maven.internal.publication.DefaultMavenPublication.

这意味着当gradle同步发生时,我动态创建的任务还不存在.

which means that my dynamically created task is not there yet when the gradle syncing occurs.

有什么办法解决这个问题吗?

Is there any way around this?

推荐答案

将其包装在project.afterEvalute块中不起作用,但这确实可行:

Wrapping it in a project.afterEvalute block didn't work, but this did:

project.tasks.whenTaskAdded { addedTask ->
if (addedTask.name == 'releaseJavadocsJar') {
    // Publishing to local maven repo via 'gradlew publishToMavenLocal'.
    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)
        }
    }
}

这篇关于Gradle Maven发布插件配置引用了动态创建的Gradle任务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆