我想在用户在 IDEA 中打开我的项目或按下“同步”按钮后立即执行某些任务:
似乎没有可靠的方法来做到这一点,因为 IDEA 没有触发任何任务。我是这样找到的:
// build.gradle
// I have nothing in this file except things below
tasks.create("asd") {
doLast {
println("ASD")
}
doFirst {
println("ASD")
}
}
tasks.all { Task task ->
task.dependsOn(tasks.named("asd").get())
}
按下“同步”按钮后,除了以下内容外,我没有任何输出:
BUILD SUCCESSFUL in 118ms
我发现的最佳解决方法 - 检查系统属性并修改 Gradle 启动参数以触发我的任务(如果 IDEA 添加了属性):
class LocalPropertiesPlugin implements Plugin<Project> {
@Override
public void apply(@NotNull Project target) {
Idea.scheduleTaskAfterIDEASync(target, "mytask");
}
private static void scheduleTaskAfterIDEASync(Project target, String taskName) {
if (isIdeaSync()) modifyGradleStartParameters(target, taskName);
}
private static void modifyGradleStartParameters(Project target, String taskName) {
final StartParameter startParameter = target.getGradle().getStartParameter();
System.out.println(startParameter);
final List<TaskExecutionRequest> taskRequests = new ArrayList<>(startParameter.getTaskRequests());
taskRequests.add(new DefaultTaskExecutionRequest(List.of(taskName)));
startParameter.setTaskRequests(taskRequests);
}
private static boolean isIdeaSync() {
return Boolean.parseBoolean(System.getProperty("idea.sync.active", "false"));
}
}
这看起来并不是一个好的、可靠的解决方案。如何正确地做到这一点?
如果在 IDEA 中的 Gradle 工具窗口中右键单击任务,则可以将其设置为在项目同步之前或之后运行。请参阅 IDEA 文档。