如何将gradle生成的源文件夹添加到Eclipse项目中?

时间:2014-11-05 06:19:11

标签: gradle gradle-eclipse

我的gradle项目使用注释处理器在gen / main / java中生成一些java代码。当我将这个项目导入Eclipse时,Eclipse不会自动将gen / main / java作为源文件夹添加到buildpath。我可以手动完成。但有没有办法自动化呢?

感谢。

3 个答案:

答案 0 :(得分:10)

您可以通过

轻松地将生成的文件夹手动添加到类路径中
eclipse {
    classpath {
        file.whenMerged { cp ->
            cp.entries.add( new org.gradle.plugins.ide.eclipse.model.SourceFolder('gen/main/java', null) )
        }
    }
}

其中null作为第二个构造函数arg意味着Eclipse应该放置已编译的"类"默认输出文件夹中的文件。如果您想更改此设置,请改为提供String,例如'箱根'

答案 1 :(得分:2)

我认为只需将第二个源目录添加到主源集即可。

将此添加到您的sourceSets { main { java { srcDirs += ["src/gen/java"] } } }

.classpath

这导致您的<classpathentry kind="src" path="src/gen/java"/> 生成以下行:

<step id="sendNotification">
    <chunk item-count="10" retry-limit="3">
        <reader ref="myItemReader"></reader>
        <processor ref="myItemProcessor"></processor>
        <writer ref="myItemWriter"></writer>
        <retryable-exception-classes>
            <include class="java.lang.IllegalArgumentException"/>
        </retryable-exception-classes>
    </chunk>
</step>

我已经使用Gradle 4.1对此进行了测试,但我怀疑它也适用于旧版本。

答案 2 :(得分:0)

如果您使用gradle cleanEclipse eclipse从命令行生成Eclipse项目,那么Andreas的回答是有效的。如果您使用STS Eclipse Gradle插件,那么您必须实现afterEclipseImport任务。以下是我的完整工作片段:

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