На этапе настройки, когда вызываются ваши применяемые функции, не гарантируется, что некоторые значения будут установлены . Так что порядок имеет значение, но полагаться на него - плохая практика. Сложные расширения, такие как NamedDomainObjectContainer, всегда лениво настраиваются.
Во-первых, вы можете использовать Property в своих задачах, их значения устанавливаются, когда они требуются. Это предпочтительный способ, потому что он сводит к минимуму конфигурацию задачи, но может очень сбивать с толку, руководство, показывающее, как использовать свойства: Ленивая конфигурация: соединение свойств вместе Хотя он использует Groovy, должно быть легко перевести в Java.
Есть еще одно решение, которое заключается в добавлении слушателя оценки поста. Он вызывается после того, как все плагины и расширения настроены, но это может вызвать путаницу, если несколько плагинов настраивают одни и те же задачи. См. Эту ветку, в которой обсуждается проект после использования . Кстати, некоторые официальные плагины Gradle по-прежнему настраивают задачи по значению.
class PluginA implements Plugin<Project> {
ExtensionA a;
public void apply(Project project) {
a = project.getExtension().create("E_A", ExtensionA.class);
project.getTasks().register("T_A"); //prop_a may not be set here
project.getTasks().findByName("T_A").doLast(t -> System.out.println(a.prop_a));
project.afterEvaluate(p ->
//prop_a will be set here
p.getTasks().findByName("T_A").doLast(t -> System.out.println(a.prop_a));
);
}
}
Очевидно, вы могли бы сделать это намного чище.
Я рекомендую вам поиграть со слушателями, чтобы лучше понять жизненный цикл Gradle.