Gradle IntelliJ IDEA-创建或重新创建我不知道的目录';我不想要,或者已经删除了

Gradle IntelliJ IDEA-创建或重新创建我不知道的目录';我不想要,或者已经删除了,gradle,intellij-idea,Gradle,Intellij Idea,场景 我正在使用IntelliJ IDEA中的Gradle模块构建一个Kotlin应用程序 我遇到了一个问题,对于我在项目中创建的每个Gradle模块,IntelliJ IDEA都会自动为我不想要的源集创建和/或重新创建目录结构 我正在Windows 10 x64上运行IntelliJ IDEA 2018.1.2 复制步骤 打开IntelliJ IDEA并“创建新项目” 创建一个渐变项目 在“附加库和框架”中,仅勾选“Kotlin(Java)” 为项目提供一个GroupId、ArtifactId

场景

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

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

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

复制步骤

  • 打开IntelliJ IDEA并“创建新项目”
  • 创建一个渐变项目
  • 在“附加库和框架”中,仅勾选“Kotlin(Java)”
  • 为项目提供一个GroupId、ArtifactId和版本
  • 选中“使用自动导入”并取消选中“为每个源集创建单独的模块”
  • 结束。此时IDE应该显示,Gradle应该同步
  • 最初的项目结构应该是这样的。我只扩展了与此问题相关的目录

    我不需要
    src
    目录,所以我删除了它,现在项目结构如下所示

    template-app
      ├ .idea
      ├ gradle
      ├ build.gradle
      ├ gradlew
      ├ gradlew.bat
      └ settings.gradle
    
    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
    
    template-app
      ├ .idea
      ├ gradle
      ├ mod-one
      │ ├ src
      │ │ ├ main
      │ │ │ └ kotlin
      │ └ build.gradle
      ├ mod-test
      │ ├ src
      │ │ └ test
      │ │   └ kotlin
      │ └ build.gradle
      ├ build.gradle
      ├ gradlew
      ├ gradlew.bat
      └ settings.gradle
    
    接下来,我在我的项目中创建了一个新的Gradle模块(mod one),现在项目结构如下所示

    template-app
      ├ .idea
      ├ gradle
      ├ build.gradle
      ├ gradlew
      ├ gradlew.bat
      └ settings.gradle
    
    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
    
    template-app
      ├ .idea
      ├ gradle
      ├ mod-one
      │ ├ src
      │ │ ├ main
      │ │ │ └ kotlin
      │ └ build.gradle
      ├ mod-test
      │ ├ src
      │ │ └ test
      │ │   └ kotlin
      │ └ build.gradle
      ├ build.gradle
      ├ gradlew
      ├ gradlew.bat
      └ settings.gradle
    
    注意mod one现在包含一个
    src
    目录,但不仅如此,我之前删除的
    src
    目录也被重新创建,包括它的子目录

    我的预期结构

    • 父模块(例如模板应用程序)根本不需要
      src
      目录。在项目的这个级别将没有代码

    • 每个模块(例如mod one)不包含任何测试,因此只需要
      main
      源集/模块,而不需要
      测试
      源集/模块

    • 测试将包含在单个模块中(例如mod测试),因此只需要
      test
      源集/模块,而不需要
      main
      源集/模块

    • 没有Java代码,因此我不需要
      Java
      目录

    • 在大多数情况下,我不需要
      资源
      ,我很乐意在必要时手动添加这些资源

    基于以上几点,结构应该是这样的

    template-app
      ├ .idea
      ├ gradle
      ├ build.gradle
      ├ gradlew
      ├ gradlew.bat
      └ settings.gradle
    
    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
    
    template-app
      ├ .idea
      ├ gradle
      ├ mod-one
      │ ├ src
      │ │ ├ main
      │ │ │ └ kotlin
      │ └ build.gradle
      ├ mod-test
      │ ├ src
      │ │ └ test
      │ │   └ kotlin
      │ └ build.gradle
      ├ build.gradle
      ├ gradlew
      ├ gradlew.bat
      └ settings.gradle
    
    问题


    IntelliJ IDEA为什么要创建和/或重新创建我不想要的目录?我如何才能停止此操作?

    取消选中设置(首选项)|构建、执行、部署|构建工具| Gradle中的自动创建空内容根目录选项


    在每个IDE上启用此选项后,将根据build.gradle文件自动创建目录结构。

    取消选中设置(首选项)|构建、执行、部署|构建工具| gradle中的自动为空内容根创建目录选项


    在每个IDE上启用此选项后,都会根据build.gradle文件自动创建目录结构。

    即使在@Andrey的答案中的选项被禁用时不应出现此行为,您可以尝试通过从根项目的Gradle中删除语言插件来阻止IntelliJ创建目录,因为您无论如何都不想将其用于源代码

    当您在IntelliJ中创建新的Gradle项目或模块并选择一种语言作为附加框架(例如Java或Kotlin)时,相应的Gradle插件将自动添加到构建脚本中,
    build.Gradle
    文件将包含以下内容:

    apply plugin: 'java'
    // OR
    apply plugin: 'kotlin'
    
    但是,您不需要将这些插件应用于没有任何源代码的Gradle项目。如果以后添加模块(子项目),只需为此模块指定其他语言框架

    关于您想要的项目结构:请注意,您违反了约定,这是可能的,但如果您真的想这样做,请重新考虑。虽然在Gradle中添加和扩展源集非常简单,但删除预定义的源集可能更难实现(请尝试
    SourceSetContainer
    的基础
    集合
    removeIf
    方法)

    最后但并非最不重要的一点,你应该考虑不关心空目录。通过IDE隐藏它们非常简单,如果它们保持为空,Git不会将它们添加到版本控制中。不要过度设计你的Gradle build,因为它几乎没有任何附加价值


    Edit:我刚刚想起,您可以应用
    javabase
    插件而不是
    java
    插件来创建源集容器,而无需添加默认源集。但是,我不确定是否存在用于Kotlin开发的类似基本插件。

    即使在@Andrey的答案中的选项被禁用时不应出现这种行为,您也可以尝试通过从根项目的Gradle中删除语言插件来阻止IntelliJ创建目录,因为你无论如何都不想用它作为来源

    当您在IntelliJ中创建新的Gradle项目或模块并选择一种语言作为附加框架(例如Java或Kotlin)时,相应的Gradle插件将自动添加到构建脚本中,
    build.Gradle
    文件将包含以下内容:

    apply plugin: 'java'
    // OR
    apply plugin: 'kotlin'
    
    但是,您不需要将这些插件应用于没有任何源代码的Gradle项目。如果以后添加模块(子项目),只需为此模块指定其他语言框架

    关于您想要的项目结构:请注意,您违反了约定,这是可能的,但如果您真的想这样做,请重新考虑。虽然在Gradle中添加和扩展源集非常简单,但删除预定义的源集可能更难实现(请尝试的基础
    集合
    removeIf
    方法)