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
时,我得到一条消息,表明命令成功了。
基于我过去所见的预期
在以前包含子项目的项目中,我会转到Import >> Existing Projects into Workspace
,在那里我会看到这个对话框:
然后我点击Browse
并选择项目根目录(在本例中为myapp
)。Eclipse将自动检测这3个子项目,并将它们作为一个选中的列表填充到上面UI中的 Projects 组件中。然后我点击“Finish”,Eclipse将把这3个子项目加载到我的工作区中,每个子项目都显示为一个单独的项目(正如它应该的那样)。
实际发生的事情
相反,当我单击myapp
作为根项目时,Eclipse只是将其作为单个项目进行填充,就好像它根本没有检测到我有子项目一样:
当我点击 Finish 时,它会将一个项目导入到我的工作区中,其中包含3个子项目的源文件夹。虽然这只是一个烦恼,但真实的的问题是类路径似乎完全被抬高了。例如,我可以将一个类添加到myapp-shared
中,然后将其包含在myapp-client
中定义的类中。而且Eclipse也不会强迫我在客户端类中添加import
语句!就好像整个项目共享同一个包/名称空间一样。
任何GradleMaven都能发现我的Gradle设置中可能导致此问题的缺陷吗?
1条答案
按热度按时间zi8p0yeb1#
这很讨厌,但我想通了。把解决方案贴在这里,以防其他人遇到这个。
1.您需要
allprojects
和subprojects
闭包,而不是一个allprojects
闭包。不确定在这两个闭包中放入什么是“安全的”,但我通过简单地在allprojects
中声明repositories
,然后将其他所有内容放入subprojects
中,就可以实现了。1.问题是,我之前在根项目上运行过
gradle eclipse
(在添加subprojects
闭包之前),因此Gradle在父/根项目目录中生成了典型工件(例如.projects
、.classpath
、.settings/*
)。1.从根目录中删除Gradle-Eclipse工件。从Eclipse工作区中删除项目(但不是磁盘!!!)。如果存在缓存,我甚至会重新启动Eclipse来清除它们。
1.运行
gradle clean
以获得更好的度量。可能不需要。1.再次运行
gradle eclipse
。1.重新导入到Eclipse中,我的朋友,在你的 Realm 里一切都会好起来的。