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

kxxlusnw  于 2022-11-04  发布在  Eclipse
关注(0)|答案(1)|浏览(253)

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设置中可能导致此问题的缺陷吗?

zi8p0yeb

zi8p0yeb1#

这很讨厌,但我想通了。把解决方案贴在这里,以防其他人遇到这个。
1.您需要allprojectssubprojects闭包,而不是一个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 里一切都会好起来的。

相关问题