【问题标题】:Gradle maven publish plugin config has reference to dynamically created gradle taskGradle maven 发布插件配置参考了动态创建的 gradle 任务
【发布时间】: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


【解决方案1】:

将其包装在 project.afterEvalute 块中不起作用,但这样做:

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)
        }
    }
}

【讨论】:

    猜你喜欢
    • 2018-10-01
    • 1970-01-01
    • 2019-06-19
    • 2023-03-19
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 2023-01-04
    • 2020-06-01
    相关资源
    最近更新 更多