如何在编写Gradle插件时评估后评估
问题描述:
我正在编写一个自定义的Gradle插件。我正在为我想在插件中创建的每个功能编写测试。 我正在使用java来编写插件。如何在编写Gradle插件时评估后评估
我在继承自Plugin接口的apply
方法中创建我的任务。
我对那些在项目构建生命周期的afterEvaluate阶段可用任务数的依赖性,但是不会早(至少不是在apply
FASE),我有过的方式无法控制这些外部任务被定义。
所以我用
project.afterEvaluate((project) -> {
customTask.dependsOn(project.getTasks().getByName("nameOfTheTask"));
});
在测试代码中,我有以下设置定义在这些任务的依赖,使用JUnit和gradle这个测试套件:
@BeforeClass
public static void initializeProject() {
project = ProjectBuilder.builder().build();
customPlugin = new CustomPlugin();
customPlugin.apply(project);
}
我可以检查规则(即在afterEvaluate块之外)依赖于测试用例通过检索我的任务使用
project.getTasks().findByName("customTask").getDependsOn()
然而,这对于为特定生命周期或更一般地说为闭包而定义的依赖性是不可能的。
有什么办法来测试是否为某个生命周期设置了正确的依赖关系?或者有没有办法检索注册了这样的代码块?
P.S.我可以使用投射,反射,阴影,修改等,但我真的很想听听这是否可以测试,或者我可能会采取错误的方法。谢谢!
答
它为我,如果我应用自定义插件这样的:
project.getPluginManager().apply(CustomPlugin.class);
答
我找不到这样做的正确的/公共API的方式,但是,对于gradle这个4.3.1这个工作对我来说:
project.getTasksByName("tasks", false); //internally it calls project.evaluate()
该方法在内部强制对项目进行评估,因此也调用afterEvaluate挂钩。