Gradle Eclipse对子项目

时间:2015-09-22 10:30:48

标签: 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

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,在那里我会看到这个对话框:

enter image description here

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

实际发生了什么

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

enter image description here

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

我的Gradle设置中是否有任何Gradle专家发现了可能导致此问题的缺陷?

1 个答案:

答案 0 :(得分:7)

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

  1. 您需要allprojectsallprojects关闭,而不是单个subprojects关闭。不确定什么是&#34;安全&#34;放入任何一个闭包,但我通过简单地在repositories内声明我的allprojects然后将其他所有内容放在subprojects内来实现这一点。
  2. 问题是我之前在根项目上运行gradle eclipse(在我添加subprojects闭包之前),因此Gradle生成了典型的工件(例如.projects,{父项目/根项目目录中的{1}},.classpath 。所以...
  3. 从根目录中删除Gradle-Eclipse工件。从Eclipse工作区中删除项目(但不是磁盘!!! )。我甚至可以重新启动Eclipse以清除任何缓存(如果它们存在)。
  4. 运行.settings/*以获得良好的衡量标准。可能不需要。
  5. 再次运行gradle clean
  6. 重新导入Eclipse,我的朋友,你的王国一切都会很好。