gradlegradle-eclipse

How to add gradle generated source folder to Eclipse project?


My gradle project generates some java code inside gen/main/java using annotation processor. When I import this project into Eclipse, Eclipse will not automatically add gen/main/java as source folder to buildpath. I can do it manually. But is there a way to automate this?

Thanks.


Solution

  • Andreas' answer works if you generate Eclipse project from command line using gradle cleanEclipse eclipse. If you use STS Eclipse Gradle plugin, then you have to implement afterEclipseImport task. Below is my full working snippet:

    project.ext {
      genSrcDir = projectDir.absolutePath + '/gen/main/java'
    }
    compileJava {
      options.compilerArgs += ['-s', project.genSrcDir]
    }
    compileJava.doFirst {
      task createGenDir << {
        ant.mkdir(dir: project.genSrcDir)
      }
      createGenDir.execute()
      println 'createGenDir DONE'
    }
    eclipse.classpath.file.whenMerged {
      classpath - >
        def genSrc = new org.gradle.plugins.ide.eclipse.model.SourceFolder('gen/main/java', null)
      classpath.entries.add(genSrc)
    }
    task afterEclipseImport(description: "Post processing after project generation", group: "IDE") {
      doLast {
        compileJava.execute()
        def classpath = new XmlParser().parse(file(".classpath"))
        new Node(classpath, "classpathentry", [kind: 'src', path: 'gen/main/java']);
        def writer = new FileWriter(file(".classpath"))
        def printer = new XmlNodePrinter(new PrintWriter(writer))
        printer.setPreserveWhitespace(true)
        printer.print(classpath)
      }
    }
    

    enter image description here