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

Posted

技术标签:

【中文标题】如何将 gradle 生成的源文件夹添加到 Eclipse 项目?【英文标题】:How to add gradle generated source folder to Eclipse project? 【发布时间】:2015-01-01 06:30:40 【问题描述】:

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

谢谢。

【问题讨论】:

你有更详细的例子吗?我可以想到未添加源文件夹的两个可能原因。 1) 源文件夹不是模型 gradle 的源文件夹的一部分...或 2) 导入项目时,该文件夹尚不存在。无论您是“1”还是“2”,都可能需要不同的解决方案。因此,如果您能确定是哪一个,那将有所帮助。尝试此操作的一种方法是确保在导入之前创建文件夹(即使它是空的)。如果现在正在添加文件夹,那么一定是因为第二个原因。 【参考方案1】:

您可以通过

轻松地将生成的文件夹手动添加到类路径中
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'。

【讨论】:

你应该在 beforeMerged 中执行此操作,否则重新运行 gradle eclipse 将添加一个 second 类路径条目(Eclipse 会抱怨)【参考方案2】:

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

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)
  

【讨论】:

好吧,我明白了,但我没有使用 STS Eclipse Gradle 插件,因为它有点不稳定恕我直言。 请提供源链接:) link【参考方案3】:

我认为在主源代码集中添加第二个源目录会更简洁一些。

将此添加到您的build.gradle

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

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

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

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

【讨论】:

以上是关于如何将 gradle 生成的源文件夹添加到 Eclipse 项目?的主要内容,如果未能解决你的问题,请参考以下文章

从单个源文件夹 Gradle 多个 jar

如何使用gradle构建源jar

将库文件夹添加到 Visual Studio

android studio中so库文件夹放在哪

使用 Build Flavors - 正确构建源文件夹和 build.gradle

如何使用 gradle 将时间戳附加到生成的 jar 中?