【问题标题】:How to include build directory as source directory in intellij when compiling with gradle使用gradle编译时如何在intellij中包含构建目录作为源目录
【发布时间】:2014-01-26 23:00:45
【问题描述】:

默认情况下,gradle idea 插件会将构建文件夹标记为已排除。如何将此文件夹包含为源文件夹? (或者避免排除它,因为它似乎是默认的......)

在我的模块 build.gradle 文件中,我尝试了以下两种配置:

idea {
    module {
        excludeDirs -= file('build/generated')
    }
}

和:

idea {
    module {
        sourceDirs += file('build/generated')
    }
}

在这两种配置下,build/generated 文件夹在编译后始终显示为 IntelliJ 中的排除文件夹。 在 IntelliJ 中,我总是必须进入“项目设置”、“模块”,然后在“源”选项卡中从排除的文件夹中删除构建文件夹并让我的项目运行。

【问题讨论】:

标签: java intellij-idea gradle build


【解决方案1】:

第一种方法

['integration/src/generated'].each {
            idea.module.sourceDirs += file(it)
            sourceSets.main.java.srcDir it
            compileJava.source file(it)
    }

第二种方法

project.ext {
        jaxbTargetDir = file("src/generated/java")
}

idea.module {
        excludeDirs -= file("$buildDir")
        sourceDirs += jaxbTargetDir
} 

【讨论】:

    【解决方案2】:

    这对我有用!

    apply plugin: 'idea'
    
    idea {
        module {
            excludeDirs -= buildDir
        }
    }
    

    【讨论】:

    • 是的,这可以工作并且是 Q 正在寻找的内容,但值得注意的是,它现在将包含构建目录中的所有内容,而不仅仅是生成的代码,这是不可取的(重复,索引时间更长等)。
    【解决方案3】:

    使用标准位置生成源代码 - 无需额外配置即可支持:

    ${project.buildDir}/generated-sources/something
    

    ${project.buildDir}/generated-test-sources/something
    

    仅用于生成的测试代码。

    something表示技术,例如:jpamodelcxf

    【讨论】:

      【解决方案4】:

      更改代码

      file('build/generated')
      

      file("$buildDir/generated")
      

      我在这里使用的是一个工作代码:

      ext {
          cxfOutputDir = file("$buildDir/generated-sources/cxf")
      }
      idea.module {
          excludeDirs -= file("$buildDir")
          sourceDirs += cxfOutputDir
      }
      

      【讨论】:

      • 错误:Could not get unknown property '$buildDir' for object of type org.gradle.plugins.ide.idea.model.IdeaModule.
      【解决方案5】:

      您肯定希望在 IntelliJ 中排除 build 目录。否则,索引将花费更长的时间,您将在搜索中得到重复等。由于 IntelliJ 不支持包含排除目录的子目录,因此我首选的解决方案是将生成的文件放入 build 之外的目录中。例如,您可以将它们放入generated(相对于项目目录),并相应地配置clean任务:

      clean {
          delete "generated"
      }
      

      另一个选项是排除build 的所有子目录,build/generated 除外。但是,由于需要明确列出要排除的目录,这需要更多的努力,并且存在脆弱的风险。 (您不希望每次插件/任务/等添加新子目录时都会中断。)

      【讨论】:

      • 所以我想我无法与 IntelliJ 对抗,每次构建后只需要手动标记所需的目录。
      • 问题是我无法控制其他模块,它是由同事编码的,需要一段时间才能进行任何更改。排除子目录将主目录构建保留为排除 ans,因此无助于获取我需要的目录作为源根目录。目前唯一的解决方案是从排除目录中删除构建目录,并在构建后将生成的目录标记为源根目录(gradle cleanIdea 想法删除此配置,所以我必须在每次构建后都这样做。Intellij 的 Gradle 模块对我们来说太慢了大项目我别无选择)。无论如何,谢谢你的时间:-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-02
      • 1970-01-01
      • 2014-09-09
      • 1970-01-01
      • 2017-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多