IntelliJ IDEA - 创建或重新创建我不想要或已经删除的目录

时间:2018-04-28 10:54:34

标签: gradle intellij-idea

方案

我正在使用IntelliJ IDEA中的Gradle模块构建Kotlin应用程序。

我遇到了一个问题,对于我在项目中创建的每个Gradle模块,IntelliJ IDEA会自动创建和/或重新创建我不想要的源集的目录结构。

我在Windows 10 x64上运行IntelliJ IDEA 2018.1.2。

重现步骤

  1. 打开IntelliJ IDEA和“创建新项目”
  2. 创建Gradle项目
  3. 从“其他库和框架”中仅选中“Kotlin(Java)”
  4. 为项目提供GroupId,ArtifactId和Version
  5. 选中“使用自动导入”并取消选中“为每个源集创建单独的模块”
  6. 完成。 此时IDE应显示,Gradle应同步。
  7. 初始项目结构应该如下所示。 我只扩展了与此问题相关的目录。

    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创建和/或重新创建我不想要的目录,如何阻止它?

2 个答案:

答案 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开发是否存在类似的基础插件。