我有一个IntelliJ IDEA (Community Edition 2016.2) project,它是通过导入在其根目录中定义了build.gradle
和settings.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
并物理重组文件系统上的目录,但我不确定:
client/
,shared/
和server/
个子项目;和显然,"共享"中的任何类(shared/src/main/scala
下)或资源(shared/src/main/resources
下);项目应对client/
和server/
可见。但客户永远不应该能够看到"服务器类/资源,反之亦然。
任何想法(没有双关语意图)我怎么能做到这一点,以及事件的顺序在哪里?
更新:此屏幕截图显示了添加到项目中的子项目,但IDEA没有将它们视为Scala子项目(我无法将软件包和Scala源添加到任何子项目中)。 / p>
答案 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.gradle
和server/build.gradle
,或者从根项目构建脚本执行,例如
configure([project(':server'), project(':client')]) {
dependencies {
compile project(':shared')
}
}