@OutputFiles
  public List<File> getGeneratedFiles() {
    List<File> files = new ArrayList<File>(2 + projects.size());
    File workspace = getWorkspaceDir();
    files.add(new File(workspace, "build.gradle"));
    files.add(new File(workspace, "settings.gradle"));

    for (DevProject p : projects.values()) {
      files.add(new File(p.getProjectDir(workspace) + "/build.gradle"));
    }
    return files;
  }
  @TaskAction
  public void executeTask() throws IOException {
    File workspace = getWorkspaceDir();
    workspace.mkdirs();

    // make run dir just in case
    new File(workspace, "run").mkdirs();

    generateRootBuild(new File(workspace, "build.gradle"));
    generateRootSettings(new File(workspace, "settings.gradle"), projects.keySet());

    URI workspaceUri = workspace.toURI();
    for (DevProject project : projects.values()) {
      File projectDir = project.getProjectDir(workspace);
      projectDir.mkdirs();
      generateProjectBuild(workspaceUri, new File(projectDir, "build.gradle"), project);
    }
  }