findByName()方法为gradle插件任务返回null

findByName()方法为gradle插件任务返回null,gradle,build.gradle,gradle-plugin,Gradle,Build.gradle,Gradle Plugin,我正在使用maven publish插件。我有一本名为《myMedia》的出版物。当我尝试执行时 tasks.findByName(“publishMyMediaPublicationToSnapshotRepository”),它返回null。如果maven publish插件创建了一个同名的任务,为什么会返回null 我无法回避这个问题。非常感谢您的帮助 编辑1:开始 我尝试了Francisco Mateo的建议,使用afterEvaluate方法,但这似乎对我也不起作用 然而,在试图找出真

我正在使用maven publish插件。我有一本名为《myMedia》的出版物。当我尝试执行时
tasks.findByName(“publishMyMediaPublicationToSnapshotRepository”)
,它返回null。如果maven publish插件创建了一个同名的任务,为什么会返回null

我无法回避这个问题。非常感谢您的帮助

编辑1:开始

我尝试了Francisco Mateo的建议,使用afterEvaluate方法,但这似乎对我也不起作用

然而,在试图找出真正的原因时,我发现了一个有趣的观察结果。我发现,当我从任务中调用
tasks.findByName(“publishMyMediaPublicationToSnapshotRepository”)
时,它工作得非常好,并打印出任务,即printTaskName按预期运行:

task printTaskName{
   doLast{
println "task name found is :--- "+tasks.findByName("publishMyMediaPublicationToSnapshotRepository")
   }
}
现在,最初在我的项目build.gradle中,我有一个publishSnapshot任务,然后使用mustRunAfter方法对逻辑进行排序:

task publishSnapshot (dependsOn: ['createMyMediaArchive','publishMyMediaPublicationToSnapshotRepository'])
tasks.findByName("publishMyMediaPublicationToSnapshotRepository").mustRunAfter tasks.findByName("createMyMediaArchive")
publishSnapshot.mustRunAfter tasks.findByName("publishMyMediaPublicationToSnapshotRepository")
执行publishSnapshot任务会产生以下错误:

Cannot invoke method mustRunAfter() on null object
tasks.findByName方法在这里似乎不起作用,因为它返回null

我是否错过了一些基础知识

编辑1:END

编辑2:开始

下面的build.gradle是我实际拥有的经过编辑的版本。我不允许分享脚本。但是剧本的结构和我的一模一样。就结构和语法而言,构建脚本的其余部分是相同的,只是名称发生了更改。Gradle版本是3.5.1

build.gradle

import java.time.LocalDate;
import java.time.format.DateTimeFormatter
import java.text.SimpleDateFormat
import Tasks.PublishArtifacts
import org.gradle.api.GradleException

buildscript {
       repositories {
          abcRelease() 
       }
       dependencies {
           classpath "org.codehaus.groovy.modules.http-builder:http-builder:0.7"
           classpath "commons-collections:commons-collections:3.2.1"
           classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.9.10"
       }
}

 repositories {
    mavenCentral()
    abcSnapshot()
    xyzRelease()
 }

apply plugin: 'maven-publish'
apply plugin: 'base'
apply plugin:'java'

apply from: "$rootDir/repositories.gradle"

def getMediaVersion(){
   project.mediaVersion
}

configurations{
    releaseMedia
}

 publishing{
      publications {
        myMedia(MavenPublication) {
            artifactId project.artifactId
            artifact "$project.artifactId"+"-"+getMediaVersion()+".tgz"
            version getMediaVersion()
        }
 }
         repositories project.artifactoryRepositories
 }

task publishSnapshot (dependsOn: ['createMyMediaArchive','publishMyMediaPublicationToSnapshotRepository'])

tasks.findByName("publishMyMediaPublicationToSnapshotRepository").mustRunAfter tasks.findByName("createMyMediaArchive")
publishSnapshot.mustRunAfter tasks.findByName("publishMyMediaPublicationToSnapshotRepository")

afterEvaluate { evaluated -> 
    evaluated.tasks.findByName("publishMyMediaPublicationToSnapshotRepository").configure {
        println "My Media name  ---------   "+it.name
    }
}

task printTaskName{
   doLast{
println "task name found is :--- "+tasks.findByName("publishMyMediaPublicationToSnapshotRepository") // This returns task name as exected
   }
}

task createMyMediaArchive{
   doLast{
      //code for creating media
   }
}
编辑2:结束

编辑3:开始

如果我单独运行任务,即首先运行任务createMyMediaArchive,然后运行任务publishSnapshot,其中任务publishSnapshot取决于 任务将媒体发布到快照存储库,即

task publishSnapshot (dependsOn: ['publishHelmMediaPublicationToSnapshotRepository'])
然后两个任务都成功运行。这证明gradle确实预先配置了任务publishHelmMediaPublicationToSnapshotRepository。 还有gradlew任务--all打印此任务

这种行为让我看起来更困惑


edit3:END

许多由
maven publish
插件执行的配置都是惰性完成的

在评估后包装
应该可以工作

afterEvaluate { evaluated -> 
    evaluated.tasks.findByName("publishMyMediaPublicationToSnapshotRepository").configure {
        println it.name
    }
}

检查拼写,这可能应该是
SnapshotRepository
@MartinZeitler,这不是问题所在。写这篇文章的时候是个打字错误。但是谢谢你指出。我已经纠正了错误的姿势,这似乎不起作用。它仍然返回null。然而,我注意到一个奇怪的行为。我将用更多详细信息和进一步的发现更新我的OP。请提供完整的
build.gradle
文件,显示您如何配置
maven publish
插件的
publishing
扩展名,并指定您正在使用的gradle版本。我已经添加了build.gradle代码。如果我错过了什么,请务必告诉我。如果有任何问题,请务必告诉我