Gradle Eclipse对子项目无法正常工作

sme*_*eeb 4 eclipse gradle

这里有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
Run Code Online (Sandbox Code Playgroud)

在哪里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'
    }
}
Run Code Online (Sandbox Code Playgroud)

在哪里myapp/settings.gradle:

include ':myapp-shared'
include ':myapp-client'
include ':myapp-server'
Run Code Online (Sandbox Code Playgroud)

当我这样做时,./gradlew eclipse我收到消息,表明命令成功.然后我打开Eclipse导入myapp为一系列单独的子项目.

期待基于我过去常常看到的历史

在之前包含子项目的项目中,我会去Import >> Existing Projects into Workspace,在那里我会看到这个对话框:

在此输入图像描述

然后Browse,我将单击并选择项目根(在此特定情况下myapp).然后Eclipse会自动检测3个子项目,并将它们填充为上面UI中Projects组件内的检查列表.然后我会点击" 完成 ",Eclipse会将3个子项目加载到我的工作区,每个子项目都显示为一个单独的项目(应该如此).

实际发生了什么

相反,当我单击myapp作为根项目时,Eclipse只是将其作为单个项目填充,几乎就像它没有检测到我有子项目一样:

在此输入图像描述

当我单击" 完成"时,它将单个项目导入我的工作区,该项目具有3个子项目中每个子项目的源文件夹.虽然这只是一个烦恼,但真正的问题是类路径似乎完全被抬高了.例如,我可以添加一个类myapp-shared,然后将其包含在内部定义的类中myapp-client,Eclipse不会强制我将import语句添加到客户端类中!这就像整个项目共享相同的包/命名空间.

任何Gradle大师都能发现我的Gradle设置中的缺陷可能是导致这种情况的原因吗?

sme*_*eeb 7

这很讨厌,但我想通了.在此处发布解决方案以防其他任何人遇到此问题.


  1. 而不是单个allprojects闭包,你需要allprojectssubprojects闭包.不知道什么是"安全"放入任何一个闭包,但我通过简单地声明我的repositories内部allprojects然后把其他所有内部工作subprojects.
  2. 问题是,我以前跑gradle eclipse的根项目(之前我在加入subprojects关闭)等等摇篮中产生的典型器物(如.projects,.classpath,.settings/*)在父/根项目目录.所以...
  3. 从根目录中删除Gradle-Eclipse工件.从Eclipse工作区(但不是磁盘!!!)中删除项目.我甚至会重新启动Eclipse以清除任何缓存(如果它们存在).
  4. 跑得gradle clean很好.可能不需要.
  5. 再跑gradle eclipse一次.
  6. 重新导入Eclipse,我的朋友,再次进入你的王国.