将Gradle / IDEA项目转换为多个子项目

时间:2017-03-08 01:24:43

标签: scala intellij-idea gradle

我有一个IntelliJ IDEA (Community Edition 2016.2) project,它是通过导入在其根目录中定义了build.gradlesettings.gradle的文件系统项目创建的。当我在IDEA中打开它时,一切都很顺利。

正如您在GitHub上看到的,目前基本的项目目录结构是:

intellij-scala-gradle-example/
    src/
      main/
          scala/
          resources/
      test/
          scala/
          resources/
    build.gradle
    settings.gradle

我现在想将此项目转换为3个较小的子项目,以便项目目录结构某些如:

intellij-scala-gradle-example/
    client/
        src/
          main/
              scala/
              resources/
          test/
              scala/
              resources/
    shared/
        src/
          main/
              scala/
              resources/
          test/
              scala/
              resources/
    server/
        src/
          main/
              scala/
              resources/
          test/
              scala/
              resources/
    build.gradle
    settings.gradle

我可以处理在命令行上运行所有mkdir并物理重组文件系统上的目录,但我不确定:

  • 我需要做什么才能让Gradle了解我现在拥有这3个client/shared/server/个子项目;和
  • 我不确定我需要做什么才能让IDEA收集所有这些更改并正确编译

显然,"共享"中的任何类(shared/src/main/scala下)或资源(shared/src/main/resources下);项目应对client/server/可见。但客户永远不应该能够看到"服务器类/资源,反之亦然。

任何想法(没有双关语意图)我怎么能做到这一点,以及事件的顺序在哪里?

更新:此屏幕截图显示了添加到项目中的子项目,但IDEA没有将它们视为Scala子项目(我无法将软件包和Scala源添加到任何子项目中)。 / p>

enter image description here

1 个答案:

答案 0 :(得分:4)

正如我已经告诉过你的那样,你没有将scala插件应用于子项目,因此它们不是scala项目,并且无法识别目录。您只将scala插件应用于根项目,但这与子项目无关。

使用

allprojects {
    apply plugin: 'scala'

    repositories {
        jcenter()
        mavenCentral()
    }

    dependencies {
        compile 'org.scala-lang:scala-library:2.11.8'
    }
}

在构建scala项目中创建所有项目,或者

subprojects {
    apply plugin: 'scala'

    repositories {
        jcenter()
        mavenCentral()
    }

    dependencies {
        compile 'org.scala-lang:scala-library:2.11.8'
    }
}

仅针对子项目执行,或执行

apply plugin: 'scala'

repositories {
    jcenter()
    mavenCentral()
}

dependencies {
    compile 'org.scala-lang:scala-library:2.11.8'
}

在每个单独的构建脚本或项目中,您希望成为scala项目,但是您更喜欢。

如果您这样做,IJ也能正确识别源文件夹。

对于依赖部分,只需声明它们就像你想要的那样。

在你的情况下添加

dependencies {
    compile project(':shared')
}

client/build.gradleserver/build.gradle,或者从根项目构建脚本执行,例如

configure([project(':server'), project(':client')]) {
    dependencies {
        compile project(':shared')
    }
}