【问题标题】:Converting Gradle/IDEA project into multiple subprojects将 Gradle/IDEA 项目转换为多个子项目
【发布时间】:2017-03-08 01:24:43
【问题描述】:

我有一个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 个更小的子项目,这样项目目录结构 something 就像:

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

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

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

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

有什么想法(没有双关语)我如何做到这一点,以及这里的事件顺序是什么?


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

【问题讨论】:

  • 感谢@Vampire (+1)。所以这里的顺序可能是:(1) 关闭 IJ 中的项目,(2) 删除 .idea 目录,(3) 按照我上面显示的方式重新排列项目目录结构,(4) 编辑 build.gradle 和 @ 987654341@ 根据 Gradle 文档,以及 (5) 将项目重新导入/打开到 IJ?听起来不错,还是我错过/误解了?再次感谢!
  • 你不需要关闭和删除 IJ 的东西。只需在 IJ 中移动和编辑。如果您在打开 Gradle 构建时启用了自动导入,IJ 将自动赶上。如果您没有这样做,请启用自动导入或在 Gradle 工具窗口中手动按刷新。
  • 嗯,再次感谢@Vampire (+1) 但请参阅my latest changes。我按照你的建议做了,(在 IJ 内部)我删除了根目录 src/ 并创建了客户端/共享/服务器目录。然后我像文档建议的那样为每个人添加了一个build.gradle,然后将所有这些子项目包含在我的根/父settings.gradle中。
  • 但是当我右键单击 client/src/main/scala 然后单击 New 它不会让我创建一个新的 Scala 类,它告诉我有问题(请参阅上面的截图)。有什么想法吗?再次非常感谢!

标签: scala intellij-idea gradle


【解决方案1】:

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

任意使用

allprojects {
    apply plugin: 'scala'

    repositories {
        jcenter()
        mavenCentral()
    }

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

在 build 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')
    }
}

【讨论】:

    猜你喜欢
    • 2013-07-30
    • 1970-01-01
    • 2015-12-13
    • 2015-04-11
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多