Gradle println печатает, когда он не вызывается

моя цель-напечатать сообщение на консоли всякий раз, когда idea задача выполняется, но, к сожалению, сообщение печатается, когда все бегут. Почему строки печати выполняются, когда idea задача не выполняется? Как я могу отобразить сообщение только тогда, когда idea задание выполнено?

построить.Gradle в

apply plugin: 'idea'

task hello << {
    println 'Hello world!'
}

tasks.idea() {
    println '*********************************************************'
    println '* You should open build.gradle as a native project from *'
    println '* within IntelliJ.                                      *'
    println '*********************************************************'
}

вывод команды gradle hello

*********************************************************
* You should open build.gradle as a native project from *
* within IntelliJ.                                      *
*********************************************************
:hello
Hello world!

BUILD SUCCESSFUL

Total time: 2.846 secs

Рабочего Раствора

tasks.getByPath('idea') << {
    println '*********************************************************'
    println '* You should open build.gradle as a native project from *'
    println '* within IntelliJ.                                      *'
    println '*********************************************************'
}

2 ответов


вам нужно будет поставить свой printlns в действие и добавьте его в idea задач. В следующем примере показано использование doFirst действие:

ideaProject.doFirst {
    println '*********************************************************'
    println '* You should open build.gradle as a native project from *'
    println '* within IntelliJ.                                      *'
    println '*********************************************************'
}

существует определенная причина, по которой ваш код выполняется до idea задача выполняется: она оценивается как код конфигурации, выполняемый на этапе конфигурации жизненный цикл сборки Gradle. На этапе выполнения выполняются только действия. Ваш hello задач это.

изменить: idea и org.gradle.plugins.ide.idea.model.IdeaModel в этом контексте, а не задача.


если вы хотите заставить gradle печатать некоторые сообщения, но только на этапе выполнения, переместите println команды doFirst или doLast. Пример для военного задания:

war {
    doFirst {
        println "Packing module/project to " + archiveName + " ..."
    }
    manifest {
        // attributes ... 
    }
    // other commands ...
    doLast {
        println "Packing done. See target directory."
    }
}