9

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

谢谢。

4

3 回答 3

11

您可以通过以下方式轻松地将生成的文件夹手动添加到类路径中

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

其中null作为第二个构造函数 arg 意味着 Eclipse 应该将编译的“类”文件放在默认输出文件夹中。如果你想改变它,只需提供一个String替代,例如'bin-gen'。

于 2014-11-05T13:11:02.123 回答
3

我认为将第二个源目录添加到主源集会更简洁一些。

将此添加到您的build.gradle

sourceSets {
    main {
        java {
            srcDirs += ["src/gen/java"]
        }
    }
}

这会在您的 中生成以下行.classpath

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

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

于 2017-11-29T16:08:32.257 回答
0

如果您从命令行使用gradle cleanEclipse eclipse. 如果你使用 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)
  }
}

在此处输入图像描述

于 2014-11-07T20:06:46.650 回答