Gradle 2.4和Eclipse Mars。这是我的项目目录结构:
myapp/ <-- root project
myapp-client/
src/main/groovy/*
build.gradle <-- just declares some client-specific deps
myapp-shared/
src/main/groovy/*
build.gradle <-- shared-specific deps
myapp-server/
src/main/groovy/*
build.gradle <-- server-specific deps and how to package server JAR
build.gradle
settings.gradle
myapp/build.gradle
的位置:
allprojects {
apply plugin: 'groovy'
apply plugin: 'eclipse'
apply plugin: 'maven'
apply plugin: 'codenarc'
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
repositories {
// ...etc.
}
dependencies {
// ...etc.
}
task wrapper(type: Wrapper) {
gradleVersion = '2.4'
}
}
myapp/settings.gradle
在哪里:
include ':myapp-shared'
include ':myapp-client'
include ':myapp-server'
当我执行./gradlew eclipse
时,我收到指示命令成功的消息。然后我打开Eclipse以将myapp
导入为一系列单独的子项目。
在以前包含子项目的项目中,我会转到Import >> Existing Projects into Workspace
,在那里我会看到这个对话框:
然后,我会点击Browse
并选择项目根目录(在此特定情况下为myapp
)。然后Eclipse会自动检测3个子项目,并将它们填充为上面UI中 Projects 组件内的检查列表。然后我会点击&#34; 完成&#34; Eclipse会将3个子项目加载到我的工作区,每个子项目都显示为一个单独的项目(应该如此)。
相反,当我点击myapp
作为根项目时,Eclipse只是将其填充为单个项目,几乎就像它没有检测到我有子项目一样:
当我点击完成时,它会将一个项目导入我的工作区,该项目包含3个子项目中每个子项目的源文件夹。虽然这只是一个烦恼,但真正的问题是类路径似乎完全被抬高了。例如,我可以向myapp-shared
添加一个类,然后将其包含在myapp-client
内定义的类中,Eclipse不会强制我在其中添加import
语句。客户课!就像整个项目共享相同的包/命名空间一样。
我的Gradle设置中是否有任何Gradle专家发现了可能导致此问题的缺陷?
答案 0 :(得分:7)
这很讨厌,但我明白了。在此处发布解决方案以防其他任何人遇到此问题。
allprojects
和allprojects
关闭,而不是单个subprojects
关闭。不确定什么是&#34;安全&#34;放入任何一个闭包,但我通过简单地在repositories
内声明我的allprojects
然后将其他所有内容放在subprojects
内来实现这一点。gradle eclipse
(在我添加subprojects
闭包之前),因此Gradle生成了典型的工件(例如.projects
,{父项目/根项目目录中的{1}},.classpath
) 。所以... .settings/*
以获得良好的衡量标准。可能不需要。gradle clean
。