方案
我正在使用IntelliJ IDEA中的Gradle模块构建Kotlin应用程序。
我遇到了一个问题,对于我在项目中创建的每个Gradle模块,IntelliJ IDEA会自动创建和/或重新创建我不想要的源集的目录结构。
我在Windows 10 x64上运行IntelliJ IDEA 2018.1.2。
重现步骤
初始项目结构应该如下所示。 我只扩展了与此问题相关的目录。
template-app
├ .idea
├ gradle
├ src
│ ├ main
│ │ ├ java
│ │ ├ kotlin
│ │ └ resources
│ └ test
│ ├ java
│ ├ kotlin
│ └ resources
├ build.gradle
├ gradlew
├ gradlew.bat
└ settings.gradle
我不需要src
目录,所以我删除了它,现在项目结构就像这样。
template-app
├ .idea
├ gradle
├ build.gradle
├ gradlew
├ gradlew.bat
└ settings.gradle
接下来,我在项目中创建一个新的Gradle模块(mod-one),现在项目结构如下所示。
template-app
├ .idea
├ gradle
├ mod-one
│ ├ src
│ │ ├ main
│ │ │ ├ java
│ │ │ ├ kotlin
│ │ │ └ resources
│ │ └ test
│ │ ├ java
│ │ ├ kotlin
│ │ └ resources
│ └ build.gradle
├ src
│ ├ main
│ │ ├ java
│ │ ├ kotlin
│ │ └ resources
│ └ test
│ ├ java
│ ├ kotlin
│ └ resources
├ build.gradle
├ gradlew
├ gradlew.bat
└ settings.gradle
请注意, mod-one 现在包含src
目录,但不仅如此,我之前删除的src
目录也已重新创建,包括它的子目录
我的预期结构
父模块(例如 template-app )根本不需要src
目录。在这个级别的项目中没有代码。
每个模块(例如 mod-one )都不包含任何测试,因此只需要main
源设置/模块,而不是{{1} } source-set / module。
测试将包含在一个模块中(例如 mod-tests ),因此只需要一个test
源集/模块,但不需要{{1源集/模块。
没有Java代码,因此我不需要test
个目录。
在大多数情况下,我不会要求main
,我很乐意在必要时手动添加这些内容。
基于以上几点,结构应如下所示。
java
问题
为什么IntelliJ IDEA创建和/或重新创建我不想要的目录,如何阻止它?
答案 0 :(得分:1)
在“设置(首选项)”中取消选中自动为空内容根创建目录选项构建,执行,部署|构建工具|摇篮。
在每个re-import from gradle IDE上启用此选项后,将根据build.gradle文件自动创建目录结构。
答案 1 :(得分:1)
即使@Andrey的答案中的选项已停用,也不会出现此行为,您可以尝试通过从Gradle中删除语言插件来阻止IntelliJ创建目录,因为您不想使用它无论如何都是来源。
当您在IntelliJ中创建一个新的Gradle项目或模块并选择一种语言作为附加框架(例如Java或Kotlin)时,相应的Gradle插件将自动添加到构建脚本中,build.gradle
文件将包含类似的东西:
apply plugin: 'java'
// OR
apply plugin: 'kotlin'
但是,您不需要将这些插件应用于不具有任何源的Gradle项目。如果以后添加模块(子项目),只需为该模块指定其他语言框架。
关于您期望的项目结构:请注意您违反了惯例,这是可能的,但如果您真的想要,请重新考虑。虽然在Gradle中添加和扩展源集很简单,但删除预定义的源集可能更难实现(尝试removeIf
的基础Collection
的{{1}}方法。
最后但同样重要的是,您应该考虑不关心空目录。通过IDE隐藏它们很简单,如果它们保持为空,Git不会将它们添加到版本控制中。不要过度设计你的Gradle版本,只需要一点点,没有额外的价值!
编辑:我刚才记得您可以应用SourceSetContainer
插件而不是java-base
插件来创建源集容器,而无需添加默认源集。但是,我不确定Kotlin开发是否存在类似的基础插件。