Метод findByName () возвращает ноль для задачи плагина gradle - PullRequest
0 голосов
/ 17 февраля 2020

Я использую плагин maven-publis h. У меня есть публикация под названием myMedia . Когда я пытаюсь выполнить tasks.findByName("publishMyMediaPublicationToSnapshotRepository"), он возвращает null . Почему возвращается null, если существует задание с таким именем, созданное плагином maven-publi sh.

Я не могу обойти эту проблему. Любая помощь очень ценится.

РЕДАКТИРОВАТЬ 1: НАЧАЛО

Я попробовал предложение Франсиско Матео использовать метод afterEvaluate, но это тоже не сработало для меня .

Однако, пытаясь выяснить истинную причину, я наткнулся на одно интересное наблюдение. Я обнаружил, что когда я вызываю tasks.findByName("publishMyMediaPublicationToSnapshotRepository") из задачи, то она отлично работает и распечатывает задачу, то есть printTaskName работает так, как ожидалось:

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

Теперь изначально в build.gradle моего проекта У меня есть задача publishSnapshot с последующим упорядочением logi c с использованием метода mustRunAfter :

task publishSnapshot (dependsOn: ['createMyMediaArchive','publishMyMediaPublicationToSnapshotRepository'])
tasks.findByName("publishMyMediaPublicationToSnapshotRepository").mustRunAfter tasks.findByName("createMyMediaArchive")
publishSnapshot.mustRunAfter tasks.findByName("publishMyMediaPublicationToSnapshotRepository")

, выполняющего publishSnapshot task выдает ошибку ниже:

Cannot invoke method mustRunAfter() on null object

tasks.findByName метод здесь не работает, так как возвращает ноль.

Я пропускаю некоторые основы ?

РЕДАКТИРОВАТЬ 1: КОНЕЦ

РЕДАКТИРОВАТЬ 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
   }
}

EDIT 2: END

РЕДАКТИРОВАТЬ 3: СТАРТ

Если я запускаю задачи по отдельности, то есть сначала запускаю задачу createMyMediaArchive , а затем запускаю задачу publishSnapshot , где задача publishSnapshot зависит от задачи publishHelmMediaPublicationToSnapshotRepository , ie.

task publishSnapshot (dependsOn: ['publishHelmMediaPublicationToSnapshotRepository'])

, тогда обе задачи выполняются успешно. Это доказывает, что gradle имеет предварительно настроенную задачу publishHelmMediaPublicationToSnapshotRepository . Также gradlew tasks --all распечатывает эту задачу.

Это поведение делает меня более запутанным.

EDIT 3: END

1 Ответ

0 голосов
/ 17 февраля 2020

Большая часть конфигурации, выполняемой плагином maven-publish, выполняется лениво.

Обтекание в afterEvaluate должно работать.

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