2017-03-08 131 views
0

我必须通过导入文件系统项目,有它的根里面定义的build.gradlesettings.gradle创建IntelliJ IDEA (Community Edition 2016.2) project。当我在IDEA中打开它时,一切都很好。转换摇篮/ 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,并在文件系统上物理重构目录,但我不确定:

  • 我需要做的,这样摇篮明白,我现在有这3个client/shared/server/个子项目;和
  • 我不知道我需要做的,这样IDEA拿起所有这些变化,在编译正确的事情

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

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


更新:此屏幕快照显示添加到该项目,但IDEA没有看到他们为斯卡拉子项目子项目(我无法包和Scala源添加到任何子项目)。

enter image description here

+1

如何添加

dependencies { compile project(':shared') } 

client/build.gradleserver/build.gradle,或做它例如根项目构建脚本关于阅读https://docs.gradle.org /current/userguide/intro_multi_project_builds.html和https://docs.gradle.org/current/userguide/multi_project_builds.html? IJ会自动做正确的事情。 – Vampire

+0

谢谢@吸血鬼(+1)。所以,也许这里的顺序是:(1)关闭在IJ项目,(2)拆下'.idea'目录,(3)重新整理项目的目录结构我在上面显示出来的样子,(4)编辑'的build.gradle '和'settings.gradle'根据Gradle文档,并(5)重新导入/打开项目到IJ?没错,还是我错过/误解?再次感谢! – smeeb

+1

你不需要关闭和删除IJ的东西。只需在IJ中移动和编辑即可。如果您在打开Gradle构建时启用了自动导入,则IJ将自动跟上。如果你不这样做,那么要么启用自动导入,要么在Gradle工具窗口中手动按刷新。 – Vampire

回答

4

正如我已经告诉你了,你不斯卡拉插件应用到子项目,所以他们没有斯卡拉项目和目录无法识别。您只将scala插件应用于根项目,但与子项目无关。

要么使用

allprojects { 
    apply plugin: 'scala' 

    repositories { 
     jcenter() 
     mavenCentral() 
    } 

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

使得所有项目在构建斯卡拉项目,或

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也能正确识别源文件夹。

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

在你的情况一样

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