Я использую плагин 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