Разница между оценкой и выполнением терминов Gradle

Я новичок в инструменте сборки Gradle, и теперь я читаю Руководство пользователя, но не могу полностью понять разницу между этапами оценки и выполнения.

На этапе конфигурации объекты проекта настроены, и создается DAG, но у нас afterEvaluate, так что здесь оценивается? Оценка зависимостей задач или что?

Ответ 1

Как вы видели в документации, существует три этапа: Инициализация, Конфигурация и Исполнение. Каждый шаг проходит от корневого проекта до подпроектов для нескольких проектов. AfterEvaluate полезен в корневом файле gradle многопроектной сборки, когда вы хотите настроить определенные элементы на основе конфигурации, сделанной в подпроектах.

Предположим, вы хотите добавить задачу для всех подпроектов, для которых определен определенный плагин. Если вы добавите в свой корневой проект:

subprojects {subProject ->
  if ( subProject.plugins.hasPlugin('myplugin')){
    subProject.task('newTask')<<{
      println "This is a new task"
    }
  }
}

Эта задача никогда не будет добавлена, поскольку корневой проект настроен перед подпроектами. Добавление afterEvaluate решит это для вас:

subprojects {subProject ->
  afterEvaluate{
    if ( subProject.plugins.hasPlugin('myplugin')){
      subProject.task('newTask')<<{
        println "This is a new task"
      }
    }
  }
}