Gradle idea插件:将sourceDirs添加到特定模块

时间:2017-11-16 21:04:03

标签: intellij-idea gradle groovy build.gradle

我尝试将sourceDirs添加到基于名为model的源集添加的模块中。此模块由gradle-apt-plugin自动添加。

我尝试了什么

我已经能够将sourceSet添加到主模块:

idea {
    module {
        sourceDirs += file('build/generated/source/apt/model')
        generatedSourceDirs += file('build/generated/source/apt/model')
        /* NOTE: adding it to generatedSourceDirs only doesn't work (seems to only mark it as generated) */
    }
}

我能找到的所有参考和示例都是关于更改主/仅模块,但我想改为配置特定模块。

在Gradle文档中,我在modules上找到了一个属性IdeaProject,所以我尝试了这个:

idea {
    project {

        println 'Module count: ' + modules.size

        modules.forEach { ideaModule ->

            def sourceSetName = ideaModule.name.substring(name.lastIndexOf('_') + 1)

            ideaModule.sourceDirs += file('build/generated/source/apt/' + sourceSetName)
            ideaModule.generatedSourceDirs += file('build/generated/source/apt/' + sourceSetName)
        }
    }
}

但是这个集合中只有一个模块,即使我的项目中有多个模块。

问题:

如何配置特定模块?

2 个答案:

答案 0 :(得分:1)

我得到help from Jetbrains support for this issue

总之,这些是当前的选择:

  • 关闭Create separate module per source set
  • 中的Preferences | Build, Execution, Deployment | Build Tools | Gradle settings选项
  • 将此类生成的源文件夹包含在主源集中(这对我不起作用 - 然后编译器抛出java.lang.IllegalStateException: endPosTable already set

还有ticket added支持Gradle 4.3中引入的annotationProcessorGeneratedSourcesDirectory属性。

答案 1 :(得分:0)

这在您可以设置的特定模块中对我有效:

sourceSets {
    generated {
        java {
            srcDirs = ['build/generated/source/apt/model']
        }
    }
}

,需要关闭“首选项” |“按源设置为每个源集创建单独的模块”选项。构建,执行,部署|生成工具|摇篮设置