当前位置: 首页 > 知识库问答 >
问题:

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

孔欣可
2023-03-14

我正在使用maven-publish插件。我有一个出版物叫MyMedia。当我尝试执行tasks.findByName(“PublismyMediapublicationTosnapshotRepository”)时,它返回null。如果有maven-publish插件创建的名称为null的任务,为什么会返回null。

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

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

task printTaskName{
   doLast{
println "task name found is :--- "+tasks.findByName("publishMyMediaPublicationToSnapshotRepository")
   }
}

现在,最初在我的项目构建中,我有一个publishSnapshot任务,然后使用mustRunAfter方法排序逻辑:

task publishSnapshot (dependsOn: ['createMyMediaArchive','publishMyMediaPublicationToSnapshotRepository'])
tasks.findByName("publishMyMediaPublicationToSnapshotRepository").mustRunAfter tasks.findByName("createMyMediaArchive")
publishSnapshot.mustRunAfter tasks.findByName("publishMyMediaPublicationToSnapshotRepository")
Cannot invoke method mustRunAfter() on null object

FindByName方法在这里似乎不起作用,因为它返回null。

我是不是错过了一些基础知识?

编辑1:结束

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

编辑3:开始

如果我单独运行这些任务,即首先运行任务createMyMediaArchive,然后运行任务publishSnapshot,其中taskpublishSnapshot依赖于任务publishHelmMediaPublicationToSnapshotRepository,即。

task publishSnapshot (dependsOn: ['publishHelmMediaPublicationToSnapshotRepository'])

然后两个任务都成功运行。这证明gradle确实预先配置了PublishHelmediaPublicationTosnapshotRepository任务。还有gradlew任务--都打印出这个任务。

共有1个答案

姜晨
2023-03-14

maven-publish插件执行的许多配置都是懒洋洋的。

afterevalue中进行包装应该可以。

afterEvaluate { evaluated -> 
    evaluated.tasks.findByName("publishMyMediaPublicationToSnapshotRepository").configure {
        println it.name
    }
}
 类似资料:
  • 我有什么? 现在我想知道在任务执行之前是否可以使用clean task(常见的构建任务)来清理构建目录。 这背后是有原因的,我想确保每次gradle都应该编译java文件,并且所有.class文件都应该被刷新(这是一些要求) 我试过什么? 我想知道什么? 有没有什么方法可以避免编写包装器任务,并做一些梯度魔术来达到要求?

  • 我想创建一个任务来运行串行命令。此时,我不需要从正在进行工作的方法返回任何内容。这可能会在以后发生变化,但我现在很好奇这是如何发生的。 这就是我所拥有的。我想为任务使用单独的方法,而不是创建匿名操作。我尝试返回void,结果是“void不能显式转换为任务”。我也试过了<代码>任务 在此过程中,我使用了一个线程来完成这项任务,但这次我想使用任务。 预计到达时间: 最后,这是我的完整解决方案

  • 任务类: 正如您在上面看到的,我有方法,通过gradle运行它可以正常工作: 完整的请访问https://github.com/spring-black/tags/blob/master/build.gradle#L35。

  • 我最近开始实现Gradle发布插件。我已经经历了https://github.com/researchgate/gradle-release#custom-释放步骤。 该插件正在将SNAPSHOT版本更新为发布版本,将当前SNAPSHOT版本更新为下一个版本。gradle发布任务也在执行编译、构建步骤。我在Jenkins中自动执行了此操作。我尝试了“构建任务 = []" 但构建任务仍已执行。我找不

  • 任务:react native gradle plugin:compileKotlin失败的“compileJava”任务(当前目标为1.8)和“compileKotlin”任务(当前目标为11)jvm目标兼容性应设置为相同的Java版本。1个可执行任务:1个已执行 失败:构建失败,但有一个异常。 错误:任务执行失败:反应本机gradle插件:compileKotlin 无法查询任务:react

  • 我正在尝试创建一个自定义任务/插件(两者都拒绝工作),用于我的gradle构建脚本。 我正在使用groovy插件,希望在单独的文件中声明任务/插件,而不是在我的构建中。格拉德尔。 我的项目树如下所示: 我试图做的是在中创建我的任务/插件类,然后在。 让我举一个小例子。 TestTask。groovy: build.gradle 当我尝试使用我的gradle.build(清洁,构建等)做任何事情时,