首页 > 解决方案 > Gradle 没有使用 Java 9+ 正确设置 Eclipse 的 .classpath

问题描述

直到 Java 8 Gradle 和 Eclipse 似乎相互享受,从 Java 9 开始变得混乱。我已经按照文档中的说明在 gradle 中配置了 eclipse 插件(没有版本或任何东西) https://docs.gradle.org/current/dsl/org.gradle.plugins.ide.eclipse.model.EclipseClasspath.html

但这并没有正确设置源和目标的兼容性,也没有正确设置要使用的 JRE。所以我把它添加到我的 gradle.build 中:

eclipse {
    classpath {
        containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-9/' // Add correct container
        file {
            whenMerged { classpath ->
                classpath.entries.removeAll { entry -> entry.kind == 'con' && !entry.path.contains('JavaSE-9')} // Remove all other containers
                classpath.entries.findAll{ it.kind == 'src' && it.entryAttributes['gradle_used_by_scope'].equals('test') }.each { // Mark test folders as containing test sourcers
                    it.entryAttributes['test'] = 'true'
                }
            }
        }
   }
   jdt {
        sourceCompatibility = org.gradle.api.JavaVersion.VERSION_1_9 
        targetCompatibility = org.gradle.api.JavaVersion.VERSION_1_9
   }
}

这行得通,但挥之不去的问题当然是:为什么我需要这样做?我真的无法想象 Gradle 的 eclipse 插件如此落后以至于不支持 Java 9。

无论如何,解决了这个问题,还有一件事我无法解决:如果我在 whenMerged 中打印类路径,我会在生成的 .classpath 文件中看到 ProjectDependency 和 Library 条目,这些都丢失了。结果 .classpath 仅包含 Source 和 Container 条目。怎么来的?

我的项目使用 Gradle 4.9 和 Eclipse 2018-09。Eclipse 设置为使用 Gradle 包装器(但使用 4.10.3 并没有什么不同)。

标签: javaeclipsegradlegradle-plugin

解决方案


推荐阅读