gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 05:28:35 25 4
gpt4 key购买 nike

我正在使用 maven-publis h插件。我有一个名为 myMedia 的出版物。当我尝试执行tasks.findByName("publishMyMediaPublicationToSnapshotRepository"),返回 null 。如果存在由maven-publish插件创建的具有该名称的任务,为什么它返回null。

我无法解决这个问题。任何帮助是极大的赞赏。

编辑1:START

我尝试了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

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

我是否缺少一些基本知识?

编辑1:END

编辑2:START

下面的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:END

编辑3:START

如果我单独运行任务,即首先运行任务 createMyMediaArchive ,然后运行任务 publishSnapshot ,其中任务 publishSnapshot 取决于
任务 publishHelmMediaPublicationToSnapshotRepository ,即。
task publishSnapshot (dependsOn: ['publishHelmMediaPublicationToSnapshotRepository'])

然后两个任务都成功运行。这证明gradle确实已预先配置了任务 publishHelmMediaPublicationToSnapshotRepository
另外 gradlew任务-所有都会打印出此任务。

这种行为使我看上去更加困惑。

编辑3:END

最佳答案

maven-publish插件执行的许多配置都是延迟完成的。

包装afterEvaluate应该可以。

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

关于gradle - findByName()方法为gradle插件任务返回null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60261498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com