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

如何将gradle生成的源文件夹添加到Eclipse项目?,gradle,gradle-eclipse,Gradle,Gradle Eclipse,我的gradle项目使用注释处理器在gen/main/java内部生成一些java代码。当我将这个项目导入Eclipse时,Eclipse不会自动将gen/main/java作为源文件夹添加到buildpath中。我可以手工做。但是,有没有一种方法可以实现自动化呢 谢谢。您可以通过 eclipse { classpath { file.whenMerged { cp -> cp.entries.add( new org.gradle.plug

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


谢谢。

您可以通过

eclipse {
    classpath {
        file.whenMerged { cp ->
            cp.entries.add( new org.gradle.plugins.ide.eclipse.model.SourceFolder('gen/main/java', null) )
        }
    }
}

其中,
null
作为第二个构造函数arg意味着Eclipse应该将编译的“类”文件放在默认的输出文件夹中。如果您想改变这一点,只需提供一个
字符串
,例如“bin gen”。

Andreas“如果您使用
gradle cleanplipse
从命令行生成Eclipse项目,那么答案是有效的。如果您使用STS EclipseGradle插件,那么您必须实现
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)
  }
}
project.ext{
genSrcDir=projectDir.absolutePath+'/gen/main/java'
}
内贾瓦{
options.compilerArgs+=['-s',project.genSrcDir]
}
编译ejava.doFirst{
任务createGenDir
def genSrc=new org.gradle.plugins.ide.eclipse.model.SourceFolder('gen/main/java',null)
classpath.entries.add(genSrc)
}
EclipseImport后的任务(说明:“项目生成后的后处理”,组:“IDE”){
多拉斯特{
compileJava.execute()
def classpath=new XmlParser().parse(文件(“.classpath”))
新节点(类路径,“类路径条目”,“种类:'src',路径:'gen/main/java']);
def writer=newfilewriter(文件(“.classpath”))
def打印机=新的XmlNodePrinter(新的PrintWriter(writer))
打印机。设置保留空白(true)
printer.print(类路径)
}
}

我认为只需在主源代码集中添加第二个源代码目录就可以更简洁一些

将此添加到您的
build.gradle

sourceSets {
    main {
        java {
            srcDirs += ["src/gen/java"]
        }
    }
}
这将导致在
.classpath
中生成以下行:

<classpathentry kind="src" path="src/gen/java"/>


我已经用Gradle 4.1测试过了,但我怀疑它也适用于较旧的版本。

您有更详细的示例吗?我可以想出两个可能的原因来解释为什么没有添加源文件夹。1) 源文件夹不是gradle拥有的源文件夹模型的一部分。。。或者2)导入项目时,文件夹还不存在。无论您是在案例“1”还是“2”中,都可能需要不同的解决方案。所以如果你能确定它是哪一个,那会有帮助。一种尝试方法是确保在导入之前创建文件夹(即使是空的)。如果现在正在添加文件夹,那么一定是因为第二个原因。啊,好吧,我明白了,但我没有使用STS Eclipse Gradle插件,因为它有点不稳定。请提供到源代码的链接:)您应该在合并之前在
中执行此操作,否则重新运行
Gradle Eclipse
将添加第二个类路径条目(Eclipse会对此抱怨)